2016-01-06 17 views
0

我正在使用Require JS,如下面的代碼所示。但是,如果我在返回的函數中聲明瞭這一點,我無法使點擊綁定工作。 如果我將此置於函數的外部,代碼將起作用。爲什麼在返回的RequireJS函數中使用聲明的時候點擊綁定是undefined

這不起作用:

return function viewModelA() { 

     var self = this; 

     self.SelectedTableRow = function(selectedRowData){ 
      // Do something with return value 
     }; 
} 

這工作:

var self = this; 

    return function viewModelA() { 

     self.SelectedTableRow = function(selectedRowData){ 
      // Do something with return value 
     }; 
} 

完整代碼:

define(function(require){ 

    var $ = require ('jquery'); 
    var ko = require ('knockout'); 
    var viewModelB = require ('ViewModelB/ViewModelB'); 

    var self = this; 
    return function viewModelA() { 

     var self = this; 

     self.member = {}; 
     self.member.countries = ko.observableArray(); 

     $.getJSON('https://restcountries.eu/rest/v1/all', function(data) { 
      self.member.countries(data); 
     }); 

     self.SelectedTableRow = function(selectedRowData){ 
      // Do something with return value 
     }; 

     return{ 
      member: self.member 
     } 
    } 
}); 

縮HTML:

<tbody data-bind="foreach: member.countries"> 
    <tr data-bind="click: SelectedTableRow, clickBubble: false"> 

回答

0

this內部/外部視圖根據函數的調用方式,模型A是不同的。您正在返回正被其他人調用的viewModelA。

試試這個

return function viewModelA() { 
    var self = this;  
    self.SelectedTableRow = function(selectedRowData){ 
     // Do something with return value 
    }; 
}.bind(this) 
+0

感謝我的朋友,我也發現,我被實例化,這意味着我是結合不同的實例功能的新實例。所以,而不是'var vma = new viewModelA();'我只是在做:'ko.applyBindings(viewModelA,document.getElementById('section-a'));'這個或者沒有'bind(this) 。 – Asynchronous

相關問題