如何搭建Ember.js开发cocos2d js 环境搭建

博客分类:
断断续续看了3周,还是一头雾水,文档不是很友好,这个框架,太多潜规则,学习曲线太大了。
简单记录一些学习笔记。
1. Ember适用于单页面网站的构建。依赖 jQuery 和 Handlebars 2个库。
2. 基于路由的控制有2种方式:带hash的url和支持history API的url。
&& 前者要求IE8+,后者要求IE10+。有关浏览器支持部分,请参阅:http://caniuse.com/#search=history,http://caniuse.com/#search=hashchange
&& 或许是因为浏览器兼容问题——广度和成熟度,Ember默认使用带hash的url路由控制。
3. Ember使用了ES5的对于Object的属性访问控制,从而要求IE9+.有关浏览器支持情况,请参阅:http://kangax.github.io/compat-table/es5/#Object.defineProperty
4. Ember是面向对象的,有类、实例、继承的概念。对于属性的读写,会触发相应的change事件,从而通知到观察者,做出相应的动作。
//定义一个类:
var Point = Ember.Object.extend({
logX: function(){
console.log(this.get('x'));
logY: function(){
console.log(this.get('y'));
logZ: function(){
console.log(this.get('z'));
//创建一个对象
var point = Point.create({
point.logX();// 3
//对象继承
var Vector = Point.extend({
add: function(vector){
var x = this.get('x') + vector.get('x');
var y = this.get('y') + vector.get('y');
var z = this.get('z') + vector.get('z');
this.set('x', x);
this.set('y', y);
this.set('z', z);
var vectorA = Vector.create({
var vectorB = Vector.create({
//应用新方法
vectorA.add(vectorB);
vectorA.logX(); //4
4.1 通常在类定义的时候,就已经确定好属性和方法了。如果要修改意见定义的类,则需要使用 reopen (类函数)/reopenClass(静态函数)。
var Book = Em.Object.extend();
Book.reopen({
title: null,
purchase: function(){
console.log('sold');
//类的静态方法
Book.reopenClass({
getById: function(id){
return Book.create({
id: '456',
title: 'Harry Potter'
Book.create({
title: 'Harry Potter'
var book = Book.getById(456);
book.purchase();
5. Ember是基于MVC来设计的,M/V/C都有相应基础的类,还有一个Route,它控制了页面的流转,可以说是程序各个模块的入口。
&& 而我们要做的,继承这些基础的类,编写相应模块的M/V/C/R.
&& 一个route 的典型工作,有如下面代码所示:
App.PostRoute = Ember.Route.extend({
//1. 根据url参数,获取model数据
model: function(params){
return Ember.$.getJSON('/posts/'+params.post_id);
//2. 把model 赋值给对应 controller 的 model属性。这个函数是默认的。
setupController: function(controller, model){
// [3]. 可以在这里自定义
controller.set('model', model);
&& Ember对MVC/R都遵循着同一套的命名规则,并且在用户没有显示定义的时候,它会在后台为用户生成。例如:
一个Ember应用程序Application,默认就会有一个 ApplicationController/ApplicationRoute/application/ApplicationView,route为 /
例如,我们有下面的路由定义:
App.Router.map(function(){
this.resource('users', function(){
this.resource('user', { path:'/:user_id' }, function(){
this.route('edit');
this.route('create');
this.route('about');
最终得到的MVC对象将会有:
URL
Route Name
Controller
TemplateN/A
ApplicationController
ApplicationRoute
application/
IndexController
IndexRoute
UsersController
UsersRoute
users/users
users.index
UsersIndexController
UsersIndexRoute users/indexN/A
UserController
user/users/:user_id
user.index
UserIndexController
UserIndexRoute
user/index/users/:user_id/edit
UserEditController
UserEditRoute
user/edit/users/create users.create
UsersCreateController
UsersCreateRoute
users/create
5.1 路由定义: route VS& resource
相同:两者都可以定义路由;
不同:resource更像是一个盒子,里面可以内嵌route,通常用于划分模块;resource用于区分模块,还可以缩短它里面route的MVC命名,
& 不必从根路径开始,而是以当前resource做起点即可。譬如,在上面route定义中:
&&&&&&& UserEditRoute instead of UsersUserEditR
UserEditControler instead of UsersUserEditC
UserEditView instead of UsersUserEditV
for templates, user/edit instead of users/user/edit.
& route则已经是最小的路由定义了,一般是指向模块内一个分支/动作。
5.2 如果定义resource时候,没有同时提供函数,则路径 resource.index 对应的route 不会被创建。
如此一来,/resource的访问,将直接使用& ResourceRoute, ResourceController, and resource template.
5.3 路由跳转 transitionTo VS transitionToRoute
// from a route
this.transitionTo('your.route');
// from a controller
this.transitionToRoute('your.route');
6.& Controller 扮演 View与Route之间的桥梁,用它封装Model,并定义了一系列和服务器通讯的功能。
6.1& Controller 在Ember中都是单例模式,访问同一路径,不会创建新的实例。
6.2& ArrayController VS ObjectController VS Controller
&& ArrayController 继承自 Ember.ArrayProxy,适用于model为数组对象,从而可以内置并利用数组的排序等功能;
&& ObjectController 继承自 Ember.ObjectProxy,适用于model为单个对象情况。
&& Controller 继承自 Ember.Object。
&& 显然,如果直接Controller它创建的实例,view获得的数据,只能从该controller获取,无法向上寻找到route。
&& 而ArrayController、ObjectController都继承自Proxy,有了“代理”功能,可以向上寻找route,从中获取model。
App = Ember.Application.create({LOG_ACTIVE_GENERATION:true});
App.IndexRoute = Ember.Route.extend({
model: function(){
var author = Ember.Object.create({name: 'Cory'});
//setupController默认就是把 controller与route 的model进行关联。
,setupController: function(controller, model){
// oops, forgot to do
// controller.set('model', model);
controller.set('isFancy', true);
App.IndexController = Ember.ObjectController.extend({ //允许向上访问route的属性。
//App.IndexController = Ember.Controller.extend({ //只有这里定义的属性,能够被view访问到。
isFancy: false,
greeting: function(){
if (this.get('isFancy')) {
return 'Salutations';
return 'Hello';
}.property('isFancy')
Ember.TEMPLATES.index = Ember.Handlebars.compile( "{{greeting}}, {{name}}&br&Is Fancy? {{input type='checkbox' checked=isFancy}}");
不同点二:
var post = App.Post.create({
title: 'JavaScript prototypes.',
body: 'This post will discuss JavaScript prototypes.'
// ObjectController 内置对属性的访问
var postController = Ember.ObjectController.create();
postController.set('model', post);
postController.get('title'); // JavaScript prototypes.
//用户需要手动指定属性
var postController = Ember.Controller.create();
postController.set('model', post);
postController.get('title'); //
postController.get('model.title'); // JavaScript prototypes.
var controller = Ember.ArrayController.create({
model: [1, 2, 3]
// 默认就是model的length属性
controller.get('length'); // 3
//Array相关的方法,也都可以直接调用
controller.contains(1); //true
//更多方法: addObject() / addObjects() / every(callback) / filter(object) / ...
7. Ember 通常的事件流转顺序是:
a. template element(e.g: click);
b. 查找对应Controller的action定义,如果不存在,则c;
c. 查找对应Routed的action定义,如果不存在,则d;
d. 查找上一级的Route中的action定义,如果不存在,则重复 d,直到AppcationRoute截止。
8. Component:
8.1 和view有些相像,事实上,它正式View的一个子类。它通过预定义的接口与其它component/View通信。
8.2& 每一个Component的模板命名都需要以 "components/" 开头。例如:
&script type="text/x-handlebars" id="components/blog-post"&
& &h1&Blog Post&/h1&
& &p&Lorem ipsum dolor sit amet.&/p&
Component Name
Component Class
App.BlogPostComponent
audio-player-controls App.AudioPlayerControlsComponent
8.3 两种定义方法:
a.& 把事件绑在事件函数的上面
upload: function(){
}.on('click')
b. 用key-value的形式:
click: function(){
//do updoad
8.4 component 如何与application的其它功能做交互?
可以通过定义事件,然后利用ember的事件发送,实现参数的传递、交互。
//1. 定义一个添加到购物车的按钮控件
App.CheckoutButtonComponent = Ember.Component.extend({
tagName: 'button',
template: Ember.Handlebars.compile('add to cart'),
click: function(){
//发送事件及其参数
this.sendAction('action', this.get('product'));
{{! 2. 购物车模板}}
{{#each products}}
{{checkout-button product=this action='addToCart'}} {{! 把数据传递给component }}
//3. 购物的controller,定义事件
App.CartController = Ember.ArrayController.extend({
actions: {
addToCart: function(product){
this.pushObjects(product);
注意:Component仅能向父级发送事件。
如果 ComponentA 里面嵌套了 ComponentB,那么ComponentB 中sendAction只能到达 ComponentA,
如果需要把该事件冒泡到 Controller 那一层,你需要在 ComponentA 里面接收该事件,并做接力,向上发送。
浏览: 295464 次
来自: 广州
推荐一份完整的教程:http://blog.ddlisting ...
请问,如果把合并前的文件,不要dest 目标目录来。如: js ...
楼主,还有个问题,&a href=&&quot ...
感谢楼主,用到了您的代码, 但现在好像有改动 否则会报错:修改 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'README.txt
前期环境搭建,需要Ruby,Python,Node.js,compass,gitRuby环境搭建Windows下建议去Ruby官网下载最新版,地址& ,根据系统版本,选择合适版本下载.,然后安装,安装过程中出现三个复选框,建议全选.安装完后,根据安装位置,配置到系统路径.Python环境搭建Windows下建议去Python官网下载最新版,地址& ,截止发稿日期,最新版本有3.4.3和2.7.10版本可选,我使用的是3.4.3的版本,执行安装.安装完后,根据安装位置,配置到系统路径.Node.js安装Windows下建议去Node.js官网下载最新版,地址 &,根据自己的系统按本选择合适版本下载安装.安装完后,根据安装位置,配置到系统路径.& 4. &compass安装&&&&&&&&Ruby环境搭建好后,打开命令提示符,输入下面命令进行安装compassgem&install&compass&&&&&&&&如果出现错误,可能原因是ruby源被墙了,建议使用淘宝的源,示例如下gem&sources&--remove&https://rubygems.org/
gem&sources&-a&https://ruby.taobao.org/
gem&sources&-l
***&CURRENT&SOURCES&***
https://ruby.taobao.org
#&请确保只有&ruby.taobao.org&&&&&&&&然后再执行安装命令.&&&&&&&&默认安装compass时会安装上sass,如果没有安装上sass,需要手动安装上sass,命令如下gem&install&sass&5. &安装git&&&&&&&&Windows下建议去Git官网下载最新版,地址& ,根据自己的系统版本选择合适的版本进行下载,按照步骤进行安装.&&&&&&&&安装完成后,根据安装位置,配置到系统路径.&6. &安装yeoman,grunt,bowernpm&install&-g&yo&grunt-cli&bower&&&&完成结果如下&&&&7. &yeoman Ember 生成器npm&install&-g&generator-ember&&&&安装结果如下&&&&&&8. &创建一个自己的目录,比如emberjs,使用命令行进入该目录,运行yo&ember& & & 进行项目创建,等待完成,下载过程会表较长.&9. &运行下面命令启动服务器grunt&server&&&&&&&&没有错误的话,会自动启动默认浏览器,打开页面& & & &遇到问题:&&&&如果遇到下面问题&&&&那么可能是缺少windows的可再发行组件包,下载地址& ,下载安装后重试命令即可.
Copyright (C) 2018 imooc.com All Rights Reserved | 京ICP备 号-11Angular.js VS. Ember.js:谁将成为Web开发的新宠? - Web前端 - ITeye资讯
本文源自于Quora网站的一个问题,作者称最近一直在为一个新的Rails项目寻找一个JavaScript框架,通过筛选,最终纠结于 和 。
这个问题获得了大量的关注,并吸引到这两个框架的开发者参与回答。如果你也纠结JavaScript框架的选择,那么本文对你来说也是一个非常好的参考资料。
Angular.js和Ember.js介绍
Angular.js是一款开源的JavaScript框架,由Google维护,其目标是增强基于Web应用,并带有MVC功能,使得开发和测试变得更加容易。
Angular.js读取包含附加自定义(标签属性)的HTML,遵从这些自定义属性中的指令,并将页面中的输入输出与由JavaScript变量表示的模型绑定起来。这些JavaScript变量的值可以手工设置,或者从静态或动态JSON资源中获取。
项目地址:
Ember.js同样是一个用于创建web应用的JavaScript MVC 框架,其采用基于字符串的Handlebars模板,支持双向绑定、观察者模式、计算属性(依赖其他属性动态变化)、自动更新模板、路由控制、状态机等。
Ember.js使用自身扩展的类来创建Ember.js对象、数组、字符串、函数,提供大量方法与属性用于操作。每一个Ember.js应用都使用各自的命名空间,避免冲突。
项目地址:
Angular.js开发者:Angular.js最能体现HTML的精髓
Angular.js其中一位开发者Misko Hevery回复了提问者的疑问,内容如下。
我是Angular团队中的一名开发者,我还不太了解Emeber.js,因此我的观点可能会有些偏颇。
有人说,Angular.js和Ember.js都在HTML中放入了太多的逻辑。当然,将逻辑放入HTML是一个不好的做法,我们也不建议这么做。事实上,Angular.js只放置绑定,而不是逻辑,我们建议把逻辑放入控制器中。但绑定同样是信息,这些信息可以放在一些地方,你有三种选择:
代码。但这使得程序模块化很成问题,因为HTML与代码紧密耦合,要想重新组成一个应用程序非常困难。
HTML。这正是Angular.js所做的。我们认为,除了放置连接信息外,你不应该在HTML中做任何事情。任何逻辑都不应该出现在这里,因为它会导致各种问题。我认为Angular.js做的绑定相当好。
元数据文件:虽然我不知道是否有人这样做,但基本上这是一个双重问题,因为你将不得不在代码中连接HTML位置和模型位置。
当然,在构建一个应用程序时,你也可以不使用框架,但不可否认,使用框架将使得你的开发工作变得更容易。
我个人认为Angular.js的独特之处在于它拥抱HTML/CSS,遵循“HTML是什么”的精神。其他一些框架提供了它们自己的API,偏离了HTML。Angular.js在所有框架中是最能体现声明式的。我相信声明式非常适合用来构建用户界面,而JS非常适合用来编写逻辑。
Angular.js允许你扩展HTML,所以你在使用Angular.js过程中遇到的任何问题都可以很容易地克服。你可以在Angular.js官网中 找到一些能够展示其特性的例子。
Ember.js开发者:Ember.js是构建“雄心勃勃”的应用程序的不二选择
Ember.js的一位开发者Tom Dale对Angular.js和Ember.js进行了详细对比,具体内容如下。
作为Ember.js的作者之一,我经常会被问道:应该使用Angular.js还是Ember.js?
我认为在做出选择之前,需要考虑:要构建什么样的应用?那么Ember.js是不是比Angular.js更好呢?
虽然两者在表面上有一些相似之处——它们都使用绑定,都比其他框架(比如Backbone.js)更有利于编写Web应用程序。
我首先来介绍一下Ember.js项目的由来。从2009年开始,我就一直在苹果公司参与 SproutCore的开发,这是一个开源的类似于Cocoa的JavaScript框架,后来演变成了你现在所看到的 。当时,我的周围是一些世界上最好的Cocoa开发者。
问题是,多少年来在客户端应用程序方面,似乎并没有真正新的突破。自80年代以来就一直遵循的基本模型——代码运行在本地计算机上,从网络上获取数据,然后在本地处理,并显示在屏幕上;而如今唯一改变的是——代码运行在浏览器的沙箱环境中,然后加载所需的“二进制”文件,而不是由用户安装到硬盘上的文件。
在考虑这些问题是,我会首先想到:在我们之前,人们已经做了什么?我认为很难去争辩框架的成功,比如Cocoa,无论在Mac还是iOS上,Cocoa都可以让开发者轻松编写受用户喜爱的应用程序。
我们希望开发者能够创建雄心勃勃的、能够与本地应用竞争的Web应用程序。要做到这一点,开发者首先需要先进的工具和正确的概念,以帮助他们沟通和协作。
在开发Ember.js过程中,我们花了大量时间从其他一些本地应用程序框架(如Cocoa)中引入一些概念,但后来我们感觉到这些概念带来的困扰多于帮助,或它们并不适合用来构建Web应用程序。因此,我们开始转向其他流行的开源项目,比如Ruby on Rails和Backbone.js,从它们中来找灵感。
因此,Ember.js最终成为了一个综合的、强大的、符合现代Web特性的、轻量级的工具。
在我看来,与Ember.js相比,Angular.js更像一个研究项目。比如,来看看它们的学习文档:Ember.js主要讨论模型、视图和控制器,而Angular.js指南要求你去学习一些类似于范围、指示符和transclusion方面的内容等。
我完全支持一些研究型项目,并希望它们能够变成最好的。但是,要记住,要在生产环境中看待应用程序。
一些大公司已经在Ember.js上投入了时间和精力,比如新版ZenDesk已经使用Ember.js重写(在他们对Backbone.js失望后,决定放弃它改用Ember.js),Square的整个Web层面也是基于Ember.js的(因为他们想要一个漂亮、响应式的UI),Groupon的移动版Web应用也是使用Ember.js开发的。此外,还有很多初创型公司通过Ember.js获得了成功,并开始对Ember.js社区进行贡献。
而我目前所看到使用Angular.js开发的大多数应用程序只是演示项目,或是Google的内部项目。
Yehuda(Ember.js开发者之一)和我也一直积极邀请真正的用户参与Ember.js框架的设计和维护,这可以确保我们在Ember.js中添加的功能对于实际开发是有用的。
事实上,在过去的几个月中,大多数Ember.js开发工作都是由Ember.js社区的核心贡献组完成的,他们来自不同的公司。如果Yehuda和我哪天有什么事情,或者我们的公司倒闭了,Ember.js还将会持续发展。这是一个真正的社区项目,而不是“Google”项目。
回到技术细节。Angular.js官网上写道“Angular.js是HTML的未来,它被设计用于构建Web应用程序。”我认为当看他们的应用程序时,这种理念是显而易见的——用户界面由HTML标记定义,使用有语义意义的属性(比如data-ng-repeat)来装饰。
而Ember.js使用Handlebars来描述HTML,来展现你的应用程序界面。从美观角度,我们可以谈谈你是更喜欢Handlebars语法(使用类似于{{#each}}的helper),还是喜欢像Angular.js那样通过额外的属性来注释HTML。我个人认为,HTML属性方法有点杂乱,难以阅读。当然,你可以使用其中任何一种方式。如果Ember.js不存在,而我又必须使用一个使用了数据属性的框架,那么我会考虑Angular.js。
抛开美观不谈,我相信,Ember.js使用基于字符串的模板的方式也为我们带来了一些优势:
基于字符串的模板可以在服务器上预编译。这样可以减少启动时间,也意味着渲染一个模板可以像调用一个函数一样简单。
Angular.js需要你在应用程序启动时遍历整个DOM,你的应用程序越大,启动速度越慢。
如果你想在服务器上渲染你的应用程序(用于Google爬虫索引或让首次加载时显示速度更快),Angular.js需要你去启动整个浏览器环境,像PhantomJS,这是资源密集型的。而Handlebars是100%的JavaScript字符串,所有你需要的只是像node.js或Rhino之类的东西。
如果你的应用程序变得越来越大,那么字符串模板可以很容易地被分割和懒加载。
此外,Handlebars只让你绑定属性,而Angular.js允许你嵌入实时更新的任意表达式。很多人最初将这个视为Ember.js的局限性,但实际上:
Ember.js允许非常容易地使用JavaScript来创建可计算属性,它可以包含任意表达式。我们只要求你指定你的依赖,这样在更新时可以智能些。
Angular.js在每次有新的变化时,必须重新计算这些表达式,这意味着需要在你的应用程序中绑定更多的元素,速度会变慢。
因为Ember.js只允许你绑定属性,我们将可以很容易地利用ECMAScript 6的性能优势,如。由于Angular.js发明了自己的带有 的JavaScript子集,这对于浏览器来说,优化代码变得比较困难。
在一般情况下,Angular.js依靠一种叫做“ 脏检查(dirty checking)”的机制来确定对象是否已进行更改。“脏检查”的方式是,在你扫描每个对象和其所有绑定属性时,比较当前值和之前已知的值。如果它发生了变化,你就需要去更新其绑定。正如你能想到的那样,代码中对象越多,成本将越昂贵。
但Angular.js开发者非常聪明,他们非常仔细地进行了折中。他们的方案是:
使用“脏检查”,你不需要使用accessors。你可以用person.name = "Bill"来代替person.set('name', "Bill"),就像在Ember.js 或 Backbone.js中的一样。
为什么在DOM中你会有这么多的对象?这最终将会成为一个瓶颈的。
Mi?ko Hevery在StackOverflow上介绍了 。他指出,使用“脏检查”,你无法一次有超过2000个绑定对象。
我认为这很好地说明了Ember.js 和 Angular.js理念上的区别。Ember.js 和 Angular.js都力求简单和易用。而Ember.js使你不必担心代码中是否有超过2000个绑定。如果你正在编写大型应用程序,那么你已经解决了你所担心的最大的事情。对于中小规模的应用程序来说,Angular.js同样是伟大的,因为这些应用程序不会触及Angular.js的限制区。
在Ember.js中,我们总是希望利用浏览器和语言中的新功能,以便使事情变得更容易。例如,一旦ES6中 可用,我们不会再要求你使用get()和set()。
所以这就是为什么我认为——如果你想构建雄心勃勃的应用程序,你应该选择Ember.js。
我们从不拒绝从其他一些框架中吸取一些知识,因为这些框架已经知道如何最好地去构建大型应用程序。
我们已经有了一个梦幻般的社区,有一群最聪明的Web开发人员,他们致力于解决现实中遇到的最难的一些问题。
此外,在开发过程中,我们对于性能方面和如何利用语言新特性方面也考虑了很久。Yehuda Katz和我一起开发Ember.js,他同时也是TC39(负责JavaScript下一个版本的制定)的成员,在此方面相当有经验。
我们已经发布了1.0版API,因此你可以开始学习,而不用担心有大的变化。
你可以通过这个视频来了解如何通过Ember.js从头开始构建一个应用程序:
下面是一些非常棒的学习资源:
Rey Bango的 教程
Luke Melia 的 幻灯片
如果你想构建一个雄心勃勃的应用程序,你一定要考虑Ember.js。
angularjs_scaffold开发者:Angular.js符合Web的未来
angularjs_scaffold的开发者Patrick Aljord也参与了讨论,内容如下。
我是 (基于Angular.js编写的针对scaffolding视图的Rails插件)的开发者,我来说说为什么我会选择Angular.js。
事实上,我原本打算在项目中使用Ember.js,因为我比较信赖Yehuda(Ember.js开发者之一)在Rails和jQuery方面的工作。但是Ember.js中随时会变化的API和匮乏的文档,使我一再推迟使用它。我偶然发现了Angular.js,就被它吸引了。
像Tom Dale(Ember.js开发者之一)所说,Ember.js受Cocoa 和Rails启发。但问题是,通过Ember.js,我并没有真正感觉到像在写一个Web应用程序,它就像一堆抛出的概念。而在Angular.js中,我感觉像在写一个Web应用程序,它真正支持所有的Web概念,并以一种非常自然的方式来扩展HTML。
事实上,Angular.js并没有使用自己的对象或重写JS方法,当你使用Angular.js时,你就使用了纯JS,并且Angular.js实现的许多概念都将直接进入下一个版本的Javascript中。
学习Angular.js,就意味着学习未来的Javascript,而学习Ember.js,你只是学习到了Ember的特定概念。
来看个例子。HTML是伟大的,因为它是声明式的,如果想要定义一个段落,你只需写如下代码:
&p&Hello world&/p&
但是如果你想非常动态地实现?你需要通过类似于下面的代码来引导浏览器:
&p id="greeting1"&&/p&
var isIE = document.attachE
var addListener = isIE
? function(e, t, fn) {
e.attachEvent('on' + t, fn);}
: function(e, t, fn) {
e.addEventListener(t, fn, false);};
addListener(document, 'load', function(){
var greeting = document.getElementById('greeting1');
if (isIE) {
greeting.innerText = 'Hello World!';
greeting.textContent = 'Hello World!';
来看看Angular.js如何实现:
&p&{{hello}}&/p&
它通过HTML声明来编写动态代码。再来看一个示例,如果你要遍历一个数组,只需:
&li ng-repeat="element in array"&element&/li&
这个语法看起来像新的 MDV标准。这看起来比Ember.js更加简洁。另外,Angular.js被优化得非常快,开发团队通过如下措施来实现:
脏检查
只检查当前视图
只在变化发生时检查
通过和Chrome团队协作来利用JIT
在一些基准测试中,结果显示Angular.js的速度要快于Ember.js,具体可见 。
Angular.js未来会拥有可重用的组件,这允许你编写非常简洁的代码,并轻松重用一些部件。这不是Angular.js特定的需求,而是Web的未来。
此外,Angular.js还拥有一个庞大的社区和 。
原帖中还有很多开发者也参与了讨论,详细内容:
你是否曾经也纠结于框架的选择?如果你也有Angular.js或Ember.js的使用经验,欢迎与我们分享。
当然是Angulars JS
ember 当年看过 太复杂
好像学习成本都很高
ember看着不习惯。。还是angular看着舒服!!!
都不用。我还是用轻量级的backbone。
damoqiongqiu 写道虽然贴自己的文章可能是不对的,但是我还是请有兴趣的人参考一下这里intellij idea/webstorm可以很友好的支持angularjs
两者都很好其实。。。。我觉得不相伯仲,就看谁文档齐全的快了。。。。
Ember.js 文档看起来很有爱啊!坐等angularjs 出重量级的IDE
虽然贴自己的文章可能是不对的,但是我还是请有兴趣的人参考一下这里
看了Ember的长篇大论和Angular的html,我还是喜欢Angular

我要回帖

更多关于 nodejs 开发环境搭建 的文章

 

随机推荐