從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