5

このコードを使用して作成された選択リストがあります。

      {{view Ember.Select
      contentBinding="App.riskCategories"
      optionValuePath="content.id"
      optionLabelPath="content.name"
      selectionBinding="riskCategory"
      class="input-medium"}}

RiskCategoryは、テンプレート用にロードされたApp.Facilityモデルのプロパティであり、App.RiskCategoryのリストには次のコードが入力されています。

App.ready = function() {
  App.riskCategories = App.RiskCategory.all()
}

これは正常に機能し、選択リストに入力されますが、ブラウザにすでにロードされているリスクカテゴリのサブセットのみが含まれます。ブラウザコンソールからApp.RiskCategory.find()を呼び出すと、残りが読み込まれ、選択リストが更新されますが、これを実行するためのコードを機能させることができません。

だから私は試しました:

App.ready = function() {
  App.riskCategories = App.RiskCategory.find()
}

また:

App.ready = function() {
  App.RiskCategory.find()
  App.riskCategories = App.RiskCategory.all()
}

ただし、これらの両方で次のエラーが発生します。

Uncaught Error: Attempted to handle event `loadedData` on <App.Facility:ember417:1> while in state rootState.loaded.updated.uncommitted. Called with undefined

選択リストに入力するためのより良い方法についてのヘルプや提案をいただければ幸いです。これらのApp.RiskCategoryオブジェクトは、データベースに格納されている定数の不変のコレクションと見なす必要があります。各App.Facilityオブジェクトは、これらのApp.RiskCategoriesの1つに関連付けられています

ありがとう!

4

3 に答える 3

3

代わりに、ルートにカテゴリを設定し、コントローラを介してテンプレートにアクセスしてみてください

APP.YourRoute = Ember.Route.extend({
    setupController:function(controller,model) {
       this._super(controller,model);
       controller.set('riskCategories',App.RiskCategory.find());
    },  

});  

選択したビューがコントローラーと同じコンテキスト内にあると仮定すると、次の方法でテンプレートのカテゴリにアクセスできます。

{{view Ember.Select
  contentBinding="controller.riskCategories"
  optionValuePath="content.id"
  optionLabelPath="content.name"
  selectionBinding="riskCategory"
  class="input-medium"}}
于 2013-01-31T16:55:41.650 に答える
1

この問題は、各App.Facilityのレンダリングを{{#ifisLoaded}}でラップすることで解決しました。

したがって、コードは次のようになります。

{{#each client.facilities}}
  {{#if isLoaded}}
    {{view Ember.Select
      contentBinding="App.riskCategories"
      optionValuePath="content.id"
      optionLabelPath="content.name"
      selectionBinding="riskCategory"
      class="input-medium"}}
  {{/if}}
{{/each}}

App.RiskCategoryの設定を行うApp.Facilityオブジェクトの読み込みがまだ完了していないようです。そのため、デフォルトのApp.RiskCategoryが設定されていて、 dataLoadedイベントが発生すると、オブジェクトが既に読み込まれているため、例外がスローされていました。変更されました。

于 2013-02-01T06:40:22.887 に答える
0

私も同様の問題を抱えていましたが、を使用した解決策#isLoadedはうまくいきませんでした。ただし、要素にpromptプロパティを追加することは何でしたか。Ember.Selectこれは、ビューのレンダリングとデータのロードの非同期性に関係していると思われます(私の場合はからFIXTURESですが、私が知る限り、DS.FixtureAdapterデータのロードのタイムラグをシミュレートしています)。

于 2013-04-03T20:09:18.610 に答える