2

これはかなり基本的なことですが、何らかの理由で機能させることができません。

会社のリソースを作成しました。

App.Router.map(function() {
    this.resource('companies');
});

モデルを指定

App.Company = DS.Model.extend({
    name: DS.attr('string'),
});

App.CompaniesRoute = Ember.Route.extend({
    model: function() {
        return App.Company.find();
    }
});

テストデータ用のフィクスチャがいくつかあります。

companiesさて、コントローラーから自分のデータにアクセスするべきではありませんか? このような

App.CompaniesController = Ember.ArrayController.extend({
    length: function () {
        return this.get('length');
    }.property(),
});

私は 0 を取得しています。この関数で試したすべてのことから、次のようにテンプレート内のモデルをループできても、コントローラーにデータがロードされていないと思われます。

  <script type="text/x-handlebars" data-template-name="companies">
    <div class="row">
      <div class="span12">
        <h3>Companies</h3>
        {{#each controller}}
          <li>{{ name }}</li>
        {{/each}}
        </ul>
      </div>
    </div>
  </script>

ドキュメントの一部では、setupControllerの代わりに が表示されmodel: function() {}ていますが、違いについては明確ではありません。私は両方を試しましたが、成功しませんでした。

何か案は?

4

2 に答える 2

3

Computed Propertyが依存するプロパティ (またはプロパティ) のパスを宣言する必要があります。この場合、content.length:

App.CompaniesController = Ember.ArrayController.extend({
    length: function () {
        return this.get('content.length');
    }.property('content.length'),
});

またはBindingを使用します。

App.CompaniesController = Ember.ArrayController.extend({
    lengthBinding: 'content.length'
});

ただし、計算されたプロパティはバインディングよりも (内部的に) 必要な作業が少なく、一般に高速です。

于 2013-07-17T21:12:08.413 に答える
1

コントローラーのコンテンツへの変更を監視せずに「長さ」をプロパティとして宣言しているため、コントローラーのインスタンスが作成されると、それは 0 になります。そのため、コントローラーは決して更新されません。または、コンテンツの「@each」プロパティを観察することもできます。

App.CompaniesController = Ember.ArrayController.extend({
  length: function () {
    return this.get('length');
  }.property('@each')
});
于 2013-07-17T22:20:21.943 に答える