4

Ember1.0.0-rc1で小さなアプリケーションをブートストラップしようとしています。アプリケーションは画像を使っていくつかのことをします。私はまだアプリケーションへのバックエンドを持っていないので、Webページのソースに埋め込んだJSONでFixtureAdapterを使用しようとしています。

残念ながら、私は店をきちんと接続することができないようです。YourAppName.Storeを設定する必要があるというエラーが表示され続けます。

キャッチされないエラー:アサーションに失敗しました:アプリケーションに「Store」プロパティが定義されていません。モデルクラスで「all」を呼び出そうとすると失敗します。'YourAppName.Store = DS.Store.extend()'のように1つ提供してください

しかし、私が何かを完全に見逃していない限り、私はそれを設定しました:

window.YIH = Ember.Application.create();

YIH.Photo = DS.Model.extend({
  url: DS.attr('string'),
});
YIH.Photo.FIXTURES = JSON.parse(document.getElementById('images').innerHTML);
YIH.Store = DS.Store.extend({
  revision: 12,
  adapter: DS.FixtureAdapter
});

YIH.photoController = Em.ArrayController.create({
  content: YIH.Photo.all(), // blows up
})

私はこの作業を他のプロパティを設定して機能させることを試みましたが、役に立ちませんでした。

4

1 に答える 1

8

更新:フィドルはEmber-Datarev12でEmberRC2を使用するようになりました

コントローラに追加する必要はありません。コレクションまたは単一のオブジェクトのいずれかからcreate、コントローラクラスを追加するだけです。extendEmber.ArrayControllerEmber.ObjectController

YIH.PhotosController = Em.ArrayController.extend();
YIH.PhotosPhotoController = Em.ObjectController.extend();

Emberはこれらのコントローラーをインスタンス化し、アプリケーションの存続期間を通じて管理します。

を使用してストアを設定するには、次のFixtureAdapterようにします。

YIH.Store = DS.Store.extend({
  revision: 12,
  adapter: 'DS.FixtureAdapter'
});

コントローラのを設定するcontentには、次のようにルーティングを介して設定することをお勧めします。

YIH.Router.map(function() {
    this.resource('photos', function() {
        this.route('photo', { path: ':photo_id' });
    });
});

YIH.IndexRoute = Em.Route.extend({
    redirect: function() {
        this.transitionTo('photos');
    }
});

YIH.PhotosRoute = Em.Route.extend({
    model: function() {
        return YIH.Photo.find();
    }
});

YIH.PhotosPhotoRoute = Em.Route.extend({
    model: function(params) {
        return YIH.Photo.find(params.photo_id);
    }
});

コントローラーは、あなたがそれを書かなくても、焼き付けられたmodelスルーを受け取ります。次のようになります。setupControllerRoute

SomeRoute = Em.Route.extend({
    setupController: function(controller, model) {
        controller.set('content', model);
    }
});

必要に応じて変更できます。

コードを追加しなかったため、JSON形式が正しいかどうかはわかりません。いずれにせよ、ストア/アダプターがとは異なる主キーを持つように構成しない限り、各JSONオブジェクトにはプロパティがid必要であり、モデルにはプロパティがないはずです。アプリケーション全体で、IDを直接呼び出す場合もありますが、命名規則を使用する必要がある場合もあります(例:「写真」ルートの動的セグメント)。idid

このようなモデルの場合:

YIH.Photo = DS.Model.extend({
    url: DS.attr('string'),
    caption: DS.attr('string')
});

フィクスチャを追加するには、次のようなJSONを提供する必要があります。

YIH.Photo.FIXTURES = [
    { id: 1,
      url: 'http://ecx.images-amazon.com/images/I/516cyMC9O7L.jpg',
      caption: 'Image 1'
    },
    { id: 2,
      url: 'http://ecx.images-amazon.com/images/I/51og8BkN8jL._SS250_.jpg',
      caption: 'Image 2'
    }
];

このサンプルフィドルを確認することをお勧めします:http://jsfiddle.net/schawaska/n3hY6/

于 2013-03-08T20:32:15.273 に答える