从Ember方面来说,没有理由使用Ember Data,因为Ember在没有Ember Data的情况下工作良好。但是Ember的基础设施在很大程度上依赖于Ember.Observable
提供的API,该API可用于Ember.Object
的所有子类。同样,如果您使用Ember.Array
和Ember.MutableArray
,则JavaScript阵列将支持更多的Ember功能,但除非您使用disable Ember.EXTEND_PROTOTYPES
,否则这将自动发生。
所以一个非常合理的方法是将现有模型类移植到Ember.Object
。除此之外,这需要使用get
和set
来访问属性。如果你这样做,那么你的对象将成为头等Ember公民,并且你将可以访问Ember的所有精巧功能,包括自动视图更新和数据绑定。
这里是Ember.Object
样子,以及它如何与Ember的其余部分结合在一起:
MyApp.Person = Ember.Object.extend({
firstName: null,
lastName: null,
init: function() {
// You can put more initialization code here.
},
// Compute fullName based on firstName and lastName.
// This will automatically propagate updates when
// firstName or lastName changes.
fullName: function() {
return this.get("firstName") + " " + this.get("lastName");
}.property("firstName", "lastName")
});
var person = MyApp.Person.create({ firstName: "Jane", lastName: "Doe" })
然后,在灰烬视图,你可以写这样的:
<p>{{person.fullName}}</p>
...和每当firstName
或lastName
更改时,视图会自动更新。同样,你可以使用下面的代码编辑firstName
:
{{view Ember.TextField valueBinding="person.firstName"}}
在这个例子中,文本字段的更改将自动传播到底层对象。 (虽然你可以变得聪明,并建立一个文本字段,只有当用户编辑完成后才传播更改。)
如果您需要将属性更新从Ember传递给QT,请参阅guide to building getters and setters with computed properties或使用observers。很大程度上取决于您如何通过JavaScript桥展示C++ API。但只要您可以以某种方式与Ember.Observable
绑定,就可以完全访问Ember的所有功能。
来源
2013-04-11 12:49:41
emk
你是否担心Qt的观点?在这里我不清楚Qt是如何实现的。你能提供更具体的东西吗?我使用Node.js,webkit和Qt编写了混合应用程序和瘦客户机。在Qt方面,您只需在加载的页面上将Qt对象暴露给JavaScript,使用Q_INVOKABLE调用C++函数,并根据需要利用信号和插槽来消除语言空白。你如何设想Ember.js改变这个设置?你仍然需要在Qt方面完成相同的步骤,对吧? – 2013-04-10 22:31:02