查询一个async的多个Ember关系不会触发任何ajax请求

Querying an async has Many Ember realtionship doesn't trigger any ajax request.

本文关键字:任何 请求 ajax 关系 一个 async 查询 Ember      更新时间:2023-09-26

标题不言自明但实际情况是,当我转到视图路由时没有Ajax请求

此外,使用chrome开发工具的ember检查器组件,在数据部分,消息模型有0项。

我有这些烬版本如下:

DEBUG: -------------------------------
DEBUG: Ember      : 1.4.0
DEBUG: Ember Data : 1.0.0-beta.7.f87cba88
DEBUG: Handlebars : 1.3.0
DEBUG: jQuery     : 1.10.2
DEBUG: -------------------------------

在这段代码中,我使用fixture来表示从我的后端返回的json,但使用fixture或RESTadapter的结果是相同的。

App.Router.map(function() {
    this.resource('threads', { path: '/' }, function() {
        this.route('view', { path: ':thread_id' })
    });
});
App.ApplicationAdapter = DS.FixtureAdapter.extend();
App.ThreadsRoute = Ember.Route.extend({
    model: function() {
       return this.store.find('thread');
    }
});
App.ThreadsViewRoute = Ember.Route.extend({
    model: function(params) {
       return this.store.find('thread', params.thread_id).get('messages');
    }
});
App.Message = DS.Model.extend({
    body: DS.attr('string'),
    thread: DS.belongsTo('thread')
});
App.Thread = DS.Model.extend({
    messages: DS.hasMany('message')
});
App.Thread.FIXTURES = [
    {
        id: 7,
        messages: [1, 4, 7, 8]
    }
];
App.Message.FIXTURES = [
    {
        id: 1,
        body: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. A, voluptas, ducimus, temporibus neque adipisci culpa veniam nostrum harum voluptates impedit similique doloribus repudiandae suscipit atque vitae quisquam dolorum libero sequi?',
        thread: 7
    },
    {
        id: 4,
        body: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. A, voluptas, ducimus, temporibus neque adipisci culpa veniam nostrum harum voluptates impedit similique doloribus repudiandae suscipit atque vitae quisquam dolorum libero sequi?',
        thread: 7
    },
    {
        id: 7,
        body: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. A, voluptas, ducimus, temporibus neque adipisci culpa veniam nostrum harum voluptates impedit similique doloribus repudiandae suscipit atque vitae quisquam dolorum libero sequi?',
        thread: 7
    },
    {
        id: 8,
        body: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. A, voluptas, ducimus, temporibus neque adipisci culpa veniam nostrum harum voluptates impedit similique doloribus repudiandae suscipit atque vitae quisquam dolorum libero sequi?',
        thread: 7
    }
];

fixture适配器不执行任何XHR请求,因为所有数据都已经在app/page中可用。

事实上,你没有看到烬检查员的任何记录,我看到的问题时,通过网络商店安装扩展,如果你不使用烬和烬数据的正确版本。我没有看到以下更新的jsbin有任何问题。

我已经更新了jsbin使它更符合习惯http://emberjs.jsbin.com/lukamuya/4

  • 为了让你更容易使用Ember,你应该遵循命名约定(ThreadsViewRoute实际上是ThreadMessagesRoute)。
  • 嵌套资源没有按照您的方式实现。检查this.resource('threads')this.resource('thread')

一个问题在你的JsBin,是你使用ThreadsView与url中的ID。由于您没有指定ThreadsViewController, Ember认为您将返回单个对象,并使用Ember.ObjectController而不是Ember.ArrayController。在此路由的model钩子中,您返回一个消息数组,这使Ember感到困惑。

另一个是store.find返回一个promise。你不能写

store.find('thread', '7').get('messages')

,而是

store.find('thread', '7').then( function( thread) { return thread.get('messages'); })

编辑:根据您的评论,我已经更新了JsBin http://emberjs.jsbin.com/lukamuya/9,以便/threads/1显示线程1的消息列表。