如何使用具有id的持久对象的通用选择视图

时间:2012-01-22 01:39:56

标签: ember.js

我在这里找到了一个可重用的选择视图的好解决方案: select dropdown with ember(@ebryn的回答)

但是,我很难找到一种方法将它用于具有id属性的对象。我的意思是我希望能够使用select视图来管理持久化对象的关联。

我在这里分享了js小提琴:http://jsfiddle.net/sohara/rgDQr/13/ 目前没有办法坚持我的thingController的选择和person属性是在页面加载上设置的。有没有一种很好的方法来改变它,以便select只管理id值,但仍然显示,例如,fullName属性?

我想我可以在thingController中添加回调,它根据person对象的id值设置personId,但这并不能解决持久性问题。然后每个页面加载将重置personId属性。另外我认为直接从视图中定位personId属性是否有意义,如果这是我想要更改的属性?

谢谢, 肖恩

1 个答案:

答案 0 :(得分:3)

Ember现在有一个内置的选择视图。

您可以在最新的Ember.js版本中找到它:http://cloud.github.com/downloads/emberjs/ember.js/ember-latest.js

以下是一个示例用法:

var App = Ember.Application.create();

App.Person = Ember.Object.extend({
    id: null,
    firstName: null,
    lastName: null,

    fullName: function() {
        return this.get('firstName') + " " + this.get('lastName');
    }.property('firstName', 'lastName').cacheable()
});

App.selectedPersonController = Ember.Object.create({
    person: null
});

App.peopleController = Ember.ArrayController.create({
    content: [
        App.Person.create({id: 1, firstName: 'Yehuda', lastName: 'Katz'}),
        App.Person.create({id: 2, firstName: 'Tom', lastName: 'Dale'}),
        App.Person.create({id: 3, firstName: 'Peter', lastName: 'Wagenet'}),
        App.Person.create({id: 4, firstName: 'Erik', lastName: 'Bryn'})
    ]
});

您的模板如下所示:

{{view Ember.Select
       contentBinding="App.peopleController"
       selectionBinding="App.selectedPersonController.person"
       optionLabelPath="content.fullName"
       optionValuePath="content.id"}}

同样,这是一个jsFiddle示例:http://jsfiddle.net/ebryn/zgLCr/