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

qgzx9mmu  于 2023-10-17  发布在  jQuery
关注(0)|答案(2)|浏览(72)

我有一个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
      });                            //
    }
  }
});

我该怎么办?并使其重新呈现模板。

编辑#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)正在输出正确的信息,而我在下一行得到了一个undefined-那么我在那一点上如何引用它呢?我是第一次处理这种事。

vvppvyoh

vvppvyoh1#

收到此错误的原因是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"));
      });
    }
  }
});
csbfibhn

csbfibhn2#

你的this是错误的。内部函数中的this与定义它的函数中的this不同。要解决此问题,您可以使用用途:

result.then(function(){    
    this.set('model',result);
  }.bind(this));

相关问题