为什么在使用返回的RequireJS函数中声明的Click绑定时未定义

Why is Click binding undefined when using this declared in a returned RequireJS function

本文关键字:声明 Click 绑定 未定义 定时 RequireJS 返回 为什么 函数      更新时间:2023-09-26

我使用的是RequireJS,如下代码所示。但是,如果我在返回的函数中声明了这一点,我就无法使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">

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

试试这个

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