簡體   English   中英

Ember.js中的訂閱者/觀察者模式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM