1

我正在开发的应用程序有一个事件页面,用户可以在其中看到他们自己和朋友的事件,并且能够使用内联事件创建器(在同一页面/路线上创建事件)。更准确地说,事件全部加载并以新闻源样式显示,这工作得非常好,但现在的问题是尝试保存新的事件模型时。我认为一些代码会使这更容易理解。路线:

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

然后在NewsfeedIndexRoute应用程序中有

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

用于显示带有ArrayControllerat /newsfeed 的所有事件。这很好用。

此外,该应用程序还有一个NewsfeedRouteController,因此事件创建器可以在所有子路由上访问,并且为了保存事件,我们有以下代码:

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"}));,它会覆盖使用newsfeed/index.hbs该模型在模板中显示的所有内容(因此只显示“新标题”)。当您在显示的偶数创建器中输入更多内容时。这显然不是我们想要的行为。理想情况下,它应该以某种方式分离,然后保存到服务器。您可以在 Newsfeed 模型中看到的另一行是一种变通方法,它工作正常,但正如评论中提到的那样,它感觉真的像一个 hack,也使 API 有点脏,因为使用带有 POST 请求的 /events 端点会更加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 回答