1

我正在寻找使用控制器的相对路径绑定对象上的属性。在旧版本的 ember 中,控制器具有绝对路径。有一段时间,您似乎也可以使用 getPath 来获取相对路径。在 RC5 中,我不确定如何绑定到相对路径。

在这个小提琴中,我想将每个项目绑定到控制器中名为 selectedId 的属性:

http://jsfiddle.net/skwd/eR9r8/

但是,在控制器的上下文中,我不确定如何进行绑定。我无权访问(据我所知)绝对或相对控制器路径。

App.MyController = Ember.Controller.extend({
    selectedId: 0,
    ...

    // items is an array of ember objects, each with a title and ID
    preparedItems: function() {
        var prepared = [];
        this.items.forEach(function(item) {
            // bind item.selectedId to this.selectedID?
        });
    }.property('items')
});
4

1 回答 1

0

您的isSelected计算属性在Item对象上,但您selectedIdIndexControllernext处理程序中进行了更改。

解决此问题的一种快速方法是isSelected在处理程序中设置项目对象本身的属性next

next: function() {
    var selectedId = this.get('selectedId');
    var prevItem = this.items[selectedId];
    if (prevItem) {
      prevItem.set('isSelected', false);   
    }

    var nextId = Math.min(this.get('selectedId') + 1, this.items.length - 1);
    this.set('selectedId', nextId);

    var nextItem = this.items[nextId];
    nextItem.set('isSelected', true);
}

这是更新的jsfiddle

话虽如此,我建议阅读 Ember入门指南

您面临的问题,即:- 在遍历集合时区分项目,实际上使用 Ember 的 itemController 以更好的方式解决。您可以通过循环遍历集合并在#each. Ember 以一种非常惯用的方式解决了这个要求,我建议改用这种方法。

编辑:修复了 jsfiddle 链接。

对于相对绑定,您可以使用 或 绑定到另一个控制器/对象的任何Ember.bind属性Ember.Binding.from。请参阅api 文档Ember.Binding另请参阅此链接以获取更高级的 ember 绑定示例。

于 2013-06-26T04:50:55.593 回答