在emberjs中加载对象的正确方法是什么?

时间:2013-10-31 14:41:26

标签: javascript ember.js

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

作为用户,您应该能够创建作业,而在创建此作业时,您需要指定一个工作领域。应该从我的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之前运行的。

我该如何处理?

1 个答案:

答案 0 :(得分:0)

获取模型的正确方法是使用商店并找到该模型类型。 (原谅我的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

)

这是更常见的方法,btw

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