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

What is the correct way to load in object in emberjs?

本文关键字:方法 是什么 对象 emberjs 加载      更新时间:2023-09-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()' 

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

我应该如何处理?

获取模型的正确方法是使用商店并查找该模型类型。(请原谅我的咖啡脚本,我用了一个转换器为我做)

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"
)