Ember.js 在emberjs中观察相关模型属性

Ember.js 在emberjs中观察相关模型属性,ember.js,ember-data,Ember.js,Ember Data,我有两个相互关联的模型,一个是RequestMatcher和Response。RequestMatcher有许多响应,但只有一个activeResponse。如何观察RequestMatcher模型上的activeResponse,以便在模板中使用?这是我的 // request-matcher.js import DS from 'ember-data'; export default DS.Model.extend({ path: DS.attr('string'), pr

我有两个相互关联的模型,一个是
RequestMatcher
Response
RequestMatcher
有许多
响应
,但只有一个
activeResponse
。如何观察
RequestMatcher
模型上的
activeResponse
,以便在模板中使用?这是我的

// request-matcher.js
import DS from 'ember-data';

export default DS.Model.extend({
    path: DS.attr('string'),
    project: DS.belongsTo('project', {async: true}),
    responses: DS.hasMany('response', {inverse: 'requestMatcher', async: true}),
    activeResponse: DS.attr('number'),
    matches_get_request: DS.attr(),
    matches_post_request: DS.attr(),
    matches_put_request: DS.attr(),
    matches_delete_request: DS.attr()
});

我使用的数字是
activeResponse
,因为ember在同一个模型上两次引用同一模型类型时遇到问题。我无法使.property()在我的
响应
模型上正常工作。它始终呈现为
true
。我也尝试过这种方法,但观察者从未被触发

//request-matcher.js 
import DS from 'ember-data';
import Ember from 'ember';

export default DS.Model.extend({
    path: DS.attr('string'),
    project: DS.belongsTo('project', {async: true}),
    responses: DS.hasMany('response', {inverse: 'requestMatcher', async: true}),
    activeResponse: DS.attr('number'),
    matches_get_request: DS.attr(),
    matches_post_request: DS.attr(),
    matches_put_request: DS.attr(),
    matches_delete_request: DS.attr(), 
    onActiveResponseChange: function() {
        Ember.run.once(this, 'setActiveResponse');
    }.observes('activeResponse', 'isLoaded'),

    setActiveResponse: function() {

        var activeResponseId = parseInt(this.get('activeResponse'));

        this.get('responses').then(function (responses) {
            responses.forEach(function (response) {
                var isActive = activeResponseId === parseInt(response.get('id'));
                response.set('isActiveResponse', isActive);
            });
        });   
    }
});
我使用数字作为activeResponse,因为ember在同一个模型上两次引用同一个模型类型时遇到问题

这就是你的问题所在。这绝对应该是一种关系,而不是一个数字。我以前在Ember数据中实现过类似的功能,所以除非他们在新的Beta中进行了突破性的更改,否则您应该能够完成它。以下是我个人如何声明这些关系:

export default DS.Model.extend({
    responses: DS.hasMany('response', { inverse: 'requestMatcher', async: true }),
    activeResponse: DS.belongsTo('response', { inverse: null, async: true })
});
inverse
设置为
null将确保您的
Response
类不必知道关系(看起来无论如何都不需要)。现在,您可以像处理任何其他关系一样使用余烬数据,只需不必更改
响应
模型中的任何内容。这应该允许您像平常一样观察
activeResponse
属性

export default DS.Model.extend({
    responses: DS.hasMany('response', { inverse: 'requestMatcher', async: true }),
    activeResponse: DS.belongsTo('response', { inverse: null, async: true })
});