2

我们有一个示例 ember 应用程序,我们在其中 CRUD 食谱。对于我们创建新配方的路线,如果我们像这样将属性传递给 createRecord:

Cookbook.RecipesNewRoute = Ember.Route.extend
  model: ->
    Cookbook.Recipe.createRecord(title: "blank")

配方会立即出现在屏幕左侧的列表中。这是jsbin来说明我的意思

但是,如果我创建没有 args a la 的食谱

Cookbook.Recipe.createRecord()

在我编辑其中一个属性之前,我看不到配方出现在列表中。即使我指定了默认值,也会发生这种情况,正如jsbin所证明的那样。

我的问题是:为什么会发生这种情况,我怎样才能创建一个没有指定参数的记录并且仍然让它立即显示?

4

3 回答 3

0

所以它看起来很老套,但这就是我如何让它按照我想要的方式工作:

 Cookbook.RecipesNewRoute = Ember.Route.extend
   model: ->
     recipe = Cookbook.Recipe.createRecord()
     @controllerFor('recipes').get("content").addReference(recipe.get("_reference"))
     recipe

我根本不知道这是否是犹太洁食,但它似乎有效。欢迎反馈和改进。我不会在几天内将此标记为已回答,以便让其他人有机会提出更好的建议。

于 2013-05-27T17:48:50.473 回答
0

查看 HTML,您将看到<li>元素已创建,但title此模型的属性为空,因此新配方不会显示在列表中。

<li>
    <a id="ember413" class="ember-view" href="#/recipes/ember369">
         <script id="metamorph-12-start" type="text/x-placeholder"></script>
         <script id="metamorph-12-end" type="text/x-placeholder"></script>
    </a>
</li>
于 2013-08-22T05:20:33.750 回答
0

查看您的 jsbin,您唯一缺少的是@get('store').commit()在创建空记录之后。

这里有一个例子:

Cookbook.RecipesNewRoute = Ember.Route.extend
  model: ->
   Cookbook.Recipe.createRecord()
   @get('store').commit()

在这里你的工作jsbin。我在模板的括号中添加了 id,以便您可以看到记录已正确创建。

编辑在您发表评论后,我对jsbin进行了一些更改,基本上我所做的更改是:

Cookbook.RecipesNewRoute = Ember.Route.extend
  setupController: (controller) ->
    controller.startEditing()

Cookbook.RecipesNewController = Ember.ObjectController.extend
  startEditing: ->
    @controllerFor('recipes').pushObject(Cookbook.Recipe.createRecord())

为了方便起见,我添加了该方法startEditing(您可以随意调用它)。startEditing如您所见,在该方法中,我们获取recipesController了新记录并将新记录添加到content数组中,这会导致即使未提交到存储,新配方也会显示出来。试试看。

希望能帮助到你

于 2013-05-22T21:24:11.317 回答