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 })
});