【问题标题】:Can Ember.Select render a promise for contentEmber.Select 能否为内容呈现承诺
【发布时间】:2014-01-21 13:37:30
【问题描述】:

我正在尝试呈现项目列表并为每个项目提供选择输入。 select 的选项来自商店,因此在传递给 Ember.Select 时将是一个承诺。这可能吗?如果内容发生变化,视图似乎不会重新呈现,所以看来我可能不得不这样做。

我的模板(缩写)

{{#each fruitBins}}
    <tr>
      <td>{{id}}</td>
      <td> {{view Ember.Select 
                          content=fruitTypes
                          optionLabelPath="content.name"
                          optionValuePath="content.id"
                          prompt="Select a Fruit Type"

                          }}
      </td>
   </tr>
{{/each}}

fruit_bins_controller.js:

...
fruitTypes: function () {
  return this.store.find('fruitType');
}.property(),

呈现选择时唯一出现的是提示。

Ember:1.3.1,数据:1.0.0.beta4

【问题讨论】:

  • 是否有适当的理由让您在控制器中处理fruitTypes 作为承诺?为什么不使用路线?
  • 您是否建议将fruitTypes: 函数移至路由?只是澄清一下。
  • 是的。将 this.store.find('need_type')) 移动到路由的 model 钩子上,以便 Ember 等待该承诺实现,然后您可以使用 setupController 钩子中的值设置控制器。
  • 如果这个数据要与这条路线的模型分开加载,你可以使用afterModel钩子。
  • @Hyder 我认为@edpaez 是正确的,查看路线afterModel 文档。 “[afterModel] 适用于执行只能在模型已经解析后才能发生的逻辑”。让我知道这是否不正确。

标签: ember.js ember-data ember-select


【解决方案1】:

原来我理解我的问题是错误的。

按照@edpaez 的建议进行更新,我认为这使我的代码符合惯例。我在路线中添加了以下内容:

model: function () {
  return Em.RSVP.hash({ 
    content: this.modelFor('<the parent element>'), 
    fruitTypes: this.store.find('fruitType')
  });
},
setupController: function(controller, model) {
  controller.setProperties(model);
}

我仍然遇到同样的问题,但发现(忘记了)使用 #each 会改变我的上下文。

解决方案是将#each 包装起来:

{{#with this as context}}
  {{#each fruitBins}}
  <tr>
    <td>{{id}}</td>
    <td> {{view Ember.Select 
                      content=context.fruitTypes
                      optionLabelPath="content.name"
                      optionValuePath="content.id"
                      prompt="Select a Fruit Type"

                      }}
    </td>
   </tr>
  {{/each}}
{{/with}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    • 2011-01-20
    • 2018-12-12
    • 2023-03-10
    • 2021-09-07
    相关资源
    最近更新 更多