1

私が取り組んでいるアプリには、ユーザーが自分自身や友人からのイベントを見るだけでなく、インラインイベントクリエーターを使用できるイベントページがあります (同じページ/ルートでイベントを作成するため)。もう少し正確に言うと、イベントはすべて読み込まれ、ニュースフィード スタイルで表示されます。これは問題なく動作しますが、新しいイベント モデルを保存しようとするときに問題が発生します。いくつかのコードがこれを理解しやすくすると思います。ルート:

this.resource('newsfeed', function() {
    this.route('personal');
    this.route('whatever');
});

その後NewsfeedIndexRoute、アプリには

model: function() {
   return App.Event.find();
}

ArrayController/ニュースフィードですべてのイベントを表示します。それはうまくいきます。

さらに、アプリにはNewsfeedRouteandControllerもあるため、すべてのサブルートでイベント作成者にアクセスでき、イベントを保存するために次のコードがあります。

App.NewsfeedRoute = Ember.Route.extend({
    setupController: function(controller){
        controller.newRecord();
    }
});

App.NewsfeedController = Em.ObjectController.extend({
    newRecord: function() {
        //The following line works but makes the API 'dirty' and an extra model needs to be created
        this.set('content', App.Newsfeed.createRecord({title: "new title"}));

        //The next line would be preferred, but overrides the displayed models at /newsfeed
        //this.set('content', App.Event.createRecord({title: "new title"}));
    },
    save: function() {
        this.get('model').save();
    }
});

したがって、問題は、/newsfeed に移動して行を使用するとthis.set('content', App.Event.createRecord({title: "new title"}));、テンプレートに表示されるすべてのものをその 1 つのモデルで上書きすることnewsfeed/index.hbsです (つまり、「新しいタイトル」を表示するだけです)。また、表示される偶数クリエーターにさらに入力すると、同様に表示されます。これは明らかに私たちが望んでいる動作ではありません。理想的には、何らかの方法で分離してから、サーバーに保存する必要があります。ニュースフィード モデルで見られる他の行は回避策であり、正常に動作しますが、コメントで述べたように、POST 要求で /events エンドポイントを使用するため、ハックのように感じられ、API が少し汚れます。はるかにRESTfulになります。

では、ember-data を使用して今すぐそれを達成する方法があれば、誰にもアイデアはありませんか?

4

1 に答える 1

2

ember でこれを実現する方法はたくさんあります。あなたは良い解決策にかなり近づいているようですが、この場合に欠けているのは EventController です。で持っていたものとよく似ているはずですApp.NewsfeedController

App.EventController = Em.ObjectController.extend({
  newRecord: function() {
    this.set('content', App.Event.createRecord({title: "new title"}));
},
  save: function() {
    this.get('model').save();
  }
});

テンプレートで、{{render}}ヘルパーを使用して

{{render event}}

そして event.hbs テンプレートを定義します。

于 2013-07-23T02:19:25.193 に答える