我有一个Ember应用程序,我是一个菜鸟。有一个表单,最终用户可以按特定日期搜索该特定项目。控制器看起来像(并在问题中评论过):
App.IpbinshowController = Ember.ObjectController.extend({
actions:{
searchPeriod: function(params){
var inventory_item_id_val=this.get('id');
var start_date_val=this.get('start_date');
var end_date_val=this.get('end_date');
alert('this is what I want with start_date: ' + start_date_val + ' and end_date: ' + end_date_val + ' and inventory_item_id: ' + inventory_item_id_val);
var result = App.InventoryItem.find(inventory_item_id_val, {start_date: start_date_val, end_date: end_date_val }); // <- this works correctly
result.then(function(){ // This part doesn't work
this.set('model',result); // <- I get 'Uncaught TypeError: undefined is not a function' for this line
}); //
}
}
});
我该如何解决这个问题?并使模板重新渲染。
THX
我觉得它会更接近这个:
var result = App.InventoryItem.find(inventory_item_id_val, {start_date: start_date_val, end_date: end_date_val });
result.then(function(){
console.log('here are result: ');
console.log(result);
result.done(function(r){
console.log('here are r: ');
console.log(r);
this.set('model', r);
}.bind(this));
});
因为console.log(r)正在输出正确的信息,我在下一行得到一个未定义的 - 所以我在那时如何引用它?对不起,简单的问题 - 这是我第一次处理这个问题。
答案 0 :(得分:1)
接收此错误的原因是this
在不同的上下文中使用,并且不引用相同的对象,Hrishi
也指出了这一点。
我通常遵循的一种简单而通用的方法是将其分配给变量并使用它。
http://emberjs.jsbin.com/pokohuku/1/edit
<强> JS 强>
App.IndexController = Ember.ObjectController.extend({
testProp:"",
actions:{
searchPeriod: function(params){
var self = this;
var result= $.ajax({url:""});
result.then(function(){
self.set("testProp","testProp's value has been set!");
alert(self.get("testProp"));
});
}
}
});
答案 1 :(得分:0)
您的this
错了。内部函数中的this
与定义它的函数中的this
不同。要解决此问题,您可以使用:
result.then(function(){
this.set('model',result);
}.bind(this));