【问题标题】:What is the correct way to load in object in emberjs?在 emberjs 中加载对象的正确方法是什么?
【发布时间】:2013-10-31 14:41:26
【问题描述】:

让我先描述一下我的用例。

作为用户,您应该能够创建工作,在创建此工作时,您需要指定工作领域。这些字段应该从我的 REST API 动态加载。 作为 EmberJS 的新手,我现在真的不知道应该如何加载这些字段,因为我正在使用 JobNewController 和路由。

我应该以某种方式将它们加载到我的路线中吗?我一直在尝试这样的事情,但我无法让它工作,我也不太确定我在做什么。

MyApp.JobsRoute = Ember.Route.extend
  setupController: (controller) ->
    controller.set 'serviceFields', MyApp.ServiceField.find()

使用这个模板

<p>Creating a new job</p>
<div class="ui input">

  Select a service field
  {{#each serviceFields }}
    {{name}}   sdf
  {{/each}}

</div>

我也尝试在控制器中这样做。

MyApp.JobsNewController = Ember.ObjectController.extend serviceFields: MyApp.ServiceField.find()

但这会产生错误

Assertion failed: Your application does not have a 'Store' property defined. Attempts to call 'find' on model classes will fail. Please provide one as with 'YourAppName.Store = DS.Store.extend()' 

我猜控制器代码是在 Store 初始化之前运行的。

我该如何处理?

【问题讨论】:

  • 您使用的是 Ember 模型还是 Ember Data(或两者都不使用)?
  • EmberData,在 Rails-ember gem 中

标签: javascript ember.js


【解决方案1】:

获取模型的正确方法是使用商店并找到该模型类型。 (请原谅我的coffeescript,我用转换器为我做的)

MyApp.JobsRoute = Ember.Route.extend(setupController: (controller, model) ->

  # return does nothing here
  # this._super(controller,model); would do the default
  controller.set "serviceFields", []
  promise = @get("store").find("serviceField")
  promise.then (records) ->
    controller.set "serviceFields", records

)

这是更常见的方法,顺便说一句

MyApp.JobsRoute = Ember.Route.extend(model: ->
  @get("store").find "serviceField"
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 2015-05-22
    • 2018-04-12
    • 1970-01-01
    • 2019-12-20
    • 2010-10-29
    • 2012-11-17
    相关资源
    最近更新 更多