2

レシピを CRUD する例の ember アプリがあります。新しいレシピを作成するルートでは、次のように属性を createRecord に渡します。

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

レシピは画面左側のリストにすぐに表示されます。これが私が何を意味するかを示すjsbinです

ただし、引数なしでレシピを作成すると、

Cookbook.Recipe.createRecord()

属性の 1 つを編集するまで、リストにレシピが表示されません。このjsbinで証明されているように、デフォルト値を指定したにもかかわらず、これが発生します。

私の質問は次のとおりです:なぜこれが起こるのですか?また、パラメータを指定せずにレコードを作成し、すぐに表示するにはどうすればよいですか?

4

3 に答える 3

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

かなりハックに思えますが、これを私が望んでいた方法で機能させる方法は次のとおりです。

 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

あなたの 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を取得して配列に追加します。これにより、ストアにコミットされていなくても、新しいレシピが表示されます。試してみる。recipesControllercontent

それが役に立てば幸い

于 2013-05-22T21:24:11.317 に答える