主要目标:用于访问当前控制器中可用的模型.find()
以外的模型 - 以便将来自当前控制器模型的数据与来自“外国”控制器模型的数据进行比较。
触发比较的原因:
我在模板中有一个按钮,带有{{ action "isResponse"}}
. 这个模板的控制器有一个isResponse : function() {...}
我遇到的问题:每次单击按钮时都会触发该操作,但App.Answer.find()
仅在第二次单击后才返回内容。我想知道这是否是因为Answer
模型尚未加载,但我不确定如何在我的示例中正确设置观察者isLoaded
(如果这甚至是问题)
那么 App.Answer.find() 第一次调用时怎么会返回空呢?
App.ChoiceController = Ember.ObjectController.extend({
chosen: false,
isResponse: function() {
// successfully returns what I want from this controller's model
var questionId = this.get('question.id')
// gets DS.RecordArray of the model i'd like to compare with
var answers = App.Answer.find()
// filter to get a result that matches this.get('question.id')
var answer = answers.filter(function(ans) {
// returns all entries that match
if(ans.get('question.id') == questionId) { return true }
}, 'answers.isLoaded'); // this observer doesn't seem to hurt or help
// get the final value I need
var choice = answer.mapProperty('choice.id')
// if choice array is not empty, (should only have 1 element anyways)
if(!choice) {
this.set('chosen', choice[0]);
} else {
this.set('chosen', false);
}
}
})
以下是涉及的模型。两者都包含 DS.belongsTo 属性
App.Choice = DS.Model.extend({
"question" : DS.belongsTo('App.Question')
})
App.Answer = DS.Model.extend({
"question" : DS.belongsTo('App.Question')
"choice" : DS.belongsTo('App.Choice')
})
App.Question = DS.Model.extend({
})
编辑
这是显示行为的jsfiddle。确保打开浏览器控制台,注意每个按钮都需要单击 2 次isResponse
才能正常运行。http://jsfiddle.net/iceking1624/QMBwe/