更改值时,Ember.Select不会触发observable

时间:2014-05-09 19:29:31

标签: ember.js handlebars.js

我有一个Ember.Select,其valueBinding设置为数组中的item属性。正在观察这个属性"通过一个功能。尽管属性的值已经改变,但在选择更改后,该函数会被触发。

HandelBars:

{{#each tmpUploadedDocument in App.uploadedDocuments}}
    {{view Ember.Select
        valueBinding="tmpUploadedDocument.Category"
        selectionBinding="tmpUploadedDocument.selectedItem"
        contentBinding="App.documentCategories"
        optionValuePath="content.value"
        optionLabelPath="content.label"
        prompt="Select Category..."
  }}
{{/each}}

使用Javascript:

window.App = Ember.Application.create();

App.documentCategories = [];
App.documentCategories.push({label: 'A', value: '1'},{label: 'B', value: '2'});

App.uploadedDocuments = Ember.A();

var tmpDocument = Ember.Object.create({
    Category: 0,
    CategoryDidChange: function() {
            console.log('Category changed to: ' + this.Category);
        }.observes('Category')
});

App.uploadedDocuments.addObject(tmpDocument);

这个jsbin显示得更清楚:JSBIN

我想在观察功能中完成的是过滤第二个Ember.Select。这是正确的方法吗?我怎样才能使这个jsbin工作?

感谢任何意见。

1 个答案:

答案 0 :(得分:2)

问题在于,在定义具有Ember.Object.create的类时,您正在尝试在Ember.Object.extend中定义观察者。您应该定义这样的类:

var TmpDocument = Ember.Object.extend({

然后从中实例化您的tmpDocument实例,或者您需要在创建文档之后将观察者添加到文档中,就像我在this working modification of your JS Bin中所做的那样:

tmpDocument.addObserver('Category', function() {
  console.log('Category changed to: ' + this.Category);
});