Ember.js QT W / Javascript桥梁
我们有一个基于QT C ++(mac和windows)的完整桌面应用程序。 我们利用webkit来提供基于HTML和Javascript的用户界面。 我们也通过JavaScript桥与C ++交互。 我正在做相当的overhall,并把Ember.js作为一个更模块化的UI的MVC。
我的问题涉及坚持最好的方法。 我应该坚持使用我们目前正在使用的Javascript对象,还是转换到Ember数据进行持久化,并通过Ember Data(翻译层)中的函数进行读/写?
此外,我们利用webkit,但我应该看到,而不是使用Node.js而不是strait html / js?
我不想做大的改变,但是我想这样做。 有什么build议?
从Ember方面来说,没有理由使用Ember数据,因为Ember在没有Ember数据的情况下工作正常。 但是Ember的基础架构在很大程度上依赖于Ember.Observable
提供的API, Ember.Observable
所有子类都可以使用这个API。 同样,如果您使用Ember.Array
和Ember.MutableArray
,则JavaScript数组将支持更多的Emberfunction,但除非您禁用Ember.EXTEND_PROTOTYPES
否则将自动发生。
所以一个非常合理的方法是将现有的模型类Ember.Object
到Ember.Object
。 这将需要,除其他外,使用get
和set
访问属性。 如果你这样做,那么你的对象将是头等Ember公民,你将有权访问所有Ember的整洁function,包括自动视图更新和数据绑定。
以下是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"}}
在此示例中,对文本字段的更改将自动传播回基础对象。 (虽然你可以变得聪明,并build立一个文本字段,只有当用户编辑完成后才会传播更改。)
如果您需要将属性更新从Ember传递给QT,请参阅构build具有计算属性的getter和setter或使用observer的指南 。 很大程度上取决于您如何通过JavaScript桥展示您的C ++ API。 但是只要你能够以某种方式绑定到Ember.Observable
,就可以完全访问Ember的所有function。