Ember控制器,承诺,并可能重新呈现模板以响应用户搜索

时间:2014-04-19 06:16:51

标签: jquery ember.js

我有一个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

编辑#1

我觉得它会更接近这个:

  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)正在输出正确的信息,我在下一行得到一个未定义的 - 所以我在那时如何引用它?对不起,简单的问题 - 这是我第一次处理这个问题。

2 个答案:

答案 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));