0

我正在尝试创建一个简单的页面,在其中循环浏览与联系人关联的电话号码列表。每个电话号码都有一个“number”和一个“phone_type”。

我创建了一个扩展 Ember.Select 的视图,它使用 phone_types 列表填充自身。除此之外,它只是一个普通的 Ember.Select:

export default Ember.Select.extend({

        thestore: '',
        optionLabelPath: 'content.code',
        optionValuePath : 'content.code',

    didInsertElement: function() {

        var vtype = this.get("valuetype");

        var vls =  this.get("thestore").filter('valuelist', { type: 'phone_type' }, function(vv) {
             return vv.get("type") == vtype;
        });

        this.set("content",vls);
    }
});

这是我在模板中使用上面定义的“valuelist”视图的代码。

    {{#each phonenumber in model}}
     <tr>
        <td>   {{phonenumber.number}}</td>
        <td>{{phonenumber.phone_type}}</td>
        <td>{{view 'valuelist' thestore=store  valuetype='phone_type' 
                selection="{{phonenumber.phone_type}}" 
                value="phonenumber.phone_type" }}</td>
     </tr>
{{/each}}

我无法弄清楚的是如何将下拉列表中的值绑定到我在模板中迭代的每个模型记录中的字段。您可以看到我在上面的代码中尝试了各种事情,但没有任何运气。

4

1 回答 1

0

您需要的属性是value. 但是,在您上面的尝试中,您正在用文字字符串填充它。当您提供用引号('...' 或 "...")包裹的值时,就会发生这种情况。您需要给它一个identifier,这是不带引号的值。所以,试试这个:

{{#each phonenumber in model}}
 <tr>
    <td>{{phonenumber.number}}</td>
    <td>{{phonenumber.phone_type}}</td>
    <td>{{view 'valuelist' thestore=store  valuetype='phone_type' 
            value=phonenumber.phone_type }}</td>
 </tr>
{{/each}}

顺便说一句,这是一种非常不正统的做事方式。视图不应与商店绑定。另外,我认为这会导致您的选择在异步加载值时无法使用(如果出现错误,可能会使您的应用程序崩溃)。

执行此操作的常规方法是phone_type在钩子中加载所有 s的列表,setupController然后将其作为参数提供给 Select 视图。

控制器:

App.MyRoute = Ember.Route.extend({
  //...
  setupController: function (c, m) {
    c.set("model", m);
    c.set("phoneTypes", [
      "home", "office"
      // or whatever, load it from store in model hook and setup here
    ]);
  }
});

模板:

{{#each phonenumber in model}}
 <tr>
    <td>{{phonenumber.number}}</td>
    <td>{{phonenumber.phone_type}}</td>
    <td>{{view Ember.Select
          content=phoneTypes
          value=phonenumber.phone_type }}</td>
 </tr>
{{/each}}
于 2014-06-08T11:42:23.293 回答