2016-01-06 2 views
0

Я использую Require JS, как показано в приведенном ниже коде. Однако я не могу заставить привязку кликов работать, если я объявил это в возвращаемой функции. Если я помещаю это вне функции, код работает.Почему привязка связывания не определена при использовании этого объявления в возвращаемой функции RequireJS

Это не работает:

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 внутренний/внешний видModelA различаются в зависимости от того, как вызывается функция. Вы возвращаете 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

Смежные вопросы