为什么在返回的RequireJS函数

时间:2016-01-06 08:00:14

标签: javascript knockout.js requirejs

我正在使用Require JS,如下面的代码所示。但是,如果我在返回的函数中声明了这一点,我就无法使click绑定工作 如果我把它放在函数之外,那么代码就可以了。

这不起作用:

    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">

1 个答案:

答案 0 :(得分:0)

this viewModelA内部/外部根据函数的调用方式而有所不同。您正在返回由其他人调用的viewModelA。

试试这个

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