[英]Subscriber/Observer pattern in Ember.js
是否可以在Ember.js中使用訂戶/觀察者模式? 例如,視圖A和視圖B都偵聽模型C內的更改。這要求模型C能夠觸發自定義事件。 我一直試圖弄清楚如何在Ember.js中制作一個模型觸發事件,但到目前為止還沒有運氣。
我相信您正在尋找的功能在Ember.js中稱為“綁定”。
主頁上有大量的例子描述了如何做你的建議,但這里有一個簡短的回顧:
window.MyApp = Ember.Application.create();
MyApp.MyModel = Ember.Object.create({
myProperty: "Hello World!",
goodbye: function() {
this.set("myProperty", "Goodbye!");
})
});
MyApp.modelInstance = MyApp.MyModel.create();
現在,在您的<body>
標簽內創建兩個視圖:
<script type="text/x-handlebars">
View1: <b>{{MyApp.modelInstance.myProperty}}</b>
</script>
<script type="text/x-handlebars">
View2: <b>{{MyApp.modelInstance.myProperty}}</b>
</script>
現在頁面應該渲染,你會看到兩個視圖都說“Hello World!”。 打開控制台並鍵入
MyApp.modelInstance.goodbye();
而且您會看到您的觀點變為“再見!”。
視圖通過使用雙花括號自動創建到MyApp.modelInstance.myProperty
的Bindings,但您可以通過各種方式創建綁定。 每當myProperty
的值發生變化時,所有綁定都將自動更新。 但是請注意,您必須調用set("myProperty", "something new")
以便Ember知道為您更新綁定。 如果你只是說myProperty = "something new"
它不會觸發任何變化事件。
至少在Sproutcore中,這就是綁定的目的。
如果你有模特
App.Person = SC.Object.extend({
name: 'Bruce Banner'
});
然后,您將擁有一個控制器,例如
App.personController = SC.ObjectController.create();
然后,您可以在控制器上設置內容
App.personController.set('content', somePerson);
現在,任何視圖都可以綁定到模型對象上的數據。
SC.LabelView = SC.LabelView.extend({
...
valueBinding: 'App.personController.name'
})
所以如果你改名字的話
somePerson.set('name', 'Chris');
視圖將自動更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.