为什么以下结果“必须设置Ember.set()才能访问此属性”?

时间:2012-02-15 16:43:40

标签: javascript ember.js

我正在尝试根据所选标签控制器的内容过滤文档控制器的内容。我不确定这是否是最佳解决方案,所以请随意提出替代方案。

除了这种不确定性之外,任何人都可以解释为什么assertion failed: Must use Ember.set() to access this property会产生以下结果吗?特别是selectedTagsBinding: "App.selectedTagsController.content"失败了。

App = Ember.Application.create();

App.documentsController = Ember.ArrayProxy.create({
    content: [],

    selectedTagsBinding: "App.selectedTagsController.content" 
});

App.selectedTagsController = Ember.ArrayProxy.create({
    content: [ new Ember.Object(), new Ember.Object() ]
});

2 个答案:

答案 0 :(得分:4)

实际上这不是错误。您应该像这样设置控制器:

App.set('documentsController', Ember.ArrayProxy.create({
  selectedTagsBinding: "App.selectedTagsController" 
}));

App.set('selectedTagsController', Ember.ArrayProxy.create({
  content: [
      Ember.Object.create({
          name: "john"
      }), Ember.Object.create({
          name: "sal"
      })
  ]
}));

我写了一篇简短的博文,详细解释了您的错误:http://ud3323.github.com/2012/02/15/ember-controllers-and-the-runloop.html

答案 1 :(得分:2)

更新:正如ud3323在他的回答中所述,这不是一个错误,这个答案是在我了解App.set之前写的


这显然是绑定的错误。在App.selectedTagsController之前移动App.documentsController的声明。

App = Ember.Application.create();

App.selectedTagsController = Ember.ArrayProxy.create({
    content: [ new Ember.Object(), new Ember.Object() ]
});

App.documentsController = Ember.ArrayProxy.create({
    content: [],

    selectedTagsBinding: "App.selectedTagsController.content" 
});