在 Ember 方面,没有理由使用 Ember Data,因为没有它,Ember 也能正常工作。Ember.Observable
但是 Ember的基础架构严重依赖于Ember.Object
. Ember.Array
同样,如果您使用和,JavaScript 数组将支持更多 Ember 功能Ember.MutableArray
,但除非您禁用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" })
然后,在 Ember 视图中,您可以编写如下内容:
<p>{{person.fullName}}</p>
…并且视图会在任何时候自动更新firstName
或lastName
更改。同样,您可以firstName
使用以下代码进行编辑:
{{view Ember.TextField valueBinding="person.firstName"}}
在此示例中,对文本字段的更改将自动传播回基础对象。(尽管您可以变得聪明并构建一个仅在用户完成编辑时才传播更改的文本字段。)
如果您需要将属性更新从 Ember 传递到 QT,请参阅使用计算属性构建 getter 和 setter 的指南或使用观察者。很大程度上取决于您通过 JavaScript 桥接器公开 C++ API 的方式。但只要你能Ember.Observable
以某种方式参与其中,你就可以完全访问 Ember 的所有功能。