Javascript 剔除:无法读取属性';x';未定义的

Javascript 剔除:无法读取属性';x';未定义的,javascript,arrays,mvvm,knockout.js,Javascript,Arrays,Mvvm,Knockout.js,我收到一个未捕获类型错误:调用beforeExample中的widget.Test()时无法读取未定义的属性“target” define( //------------------------------------------------------------------- // DEPENDENCIES //-------------------------------------------------------------

我收到一个未捕获类型错误:调用beforeExample中的widget.Test()时无法读取未定义的属性“target”

define(
          //-------------------------------------------------------------------
          // DEPENDENCIES
          //-------------------------------------------------------------------
        ['knockout'],

        // -------------------------------------------------------------------
        // MODULE DEFINITION
        // -------------------------------------------------------------------
        function (ko) {

        "use strict";

        return {

            First_Arr: ko.observableArray(['arrayItem0', 'arrayItem1', 'arrayItem2', 'arrayItem3']),
            Second_Arr: ko.observableArray(['arrayItem0', 'arrayItem1', 'arrayItem2']),

            Test: function(widget, event) {            

                var element = event.target;          
                var pathname = location.pathname;
                var anotherArray = [
                    ["/some-url-path", widget.First_Arr()],
                    ["/some-other-url-path", widget.Second_Arr()]
                ];

                for (var i = 0; i < anotherArray.length; i++) {
                    // Do some stuff and console.log the array items                        
                }

            },

            beforeAppear: function(page) {

                var widget = this;
                widget.Test();

            }
        }
    }
);
定义(
//-------------------------------------------------------------------
//依赖关系
//-------------------------------------------------------------------
[“击倒”],
// -------------------------------------------------------------------
//模块定义
// -------------------------------------------------------------------
职能(ko){
“严格使用”;
返回{
第一个Arr:ko.observearray(['arrayItem0','arrayItem1','arrayItem2','arrayItem3']),
第二个Arr:ko.observearray(['arrayItem0','arrayItem1','arrayItem2']),
测试:函数(小部件、事件){
var元素=event.target;
var pathname=location.pathname;
var另一个数组=[
[“/some url path”,widget.First_Arr(),
[“/其他url路径”,widget.Second_Arr()]
];
对于(var i=0;i
奇怪的是,如果我在视图中创建一个按钮,例如:

<button id="btn-click" data-bind="click: Test">test</button>
测试
然后单击它,就可以得到预期的结果,将数组的内容按预期打印到控制台

另外,我尝试注释var元素=event.target;行,因为我认为这是问题的根源,但这只是产生了以下问题:uncaughttypeerror:无法读取未定义的属性'First\u Arr()'。


这个有点不知所措。任何帮助都会很有帮助。

当您调用
widget.Test()
时,您没有向它传递事件参数,因此
事件
将未定义,而
事件。目标
将出错,因为
目标
在“未定义”上不存在。在点击绑定中,点击“事件”会自动传递到函数中

第二个问题是
var widget=this本质上是设置
widget=beforepearch。在函数中,“this”指函数本身。看

与其将模块定义为对象文字,不如改用构造函数。看

这可能看起来像:

define(
          //-------------------------------------------------------------------
          // DEPENDENCIES
          //-------------------------------------------------------------------
        ['knockout'],

        // -------------------------------------------------------------------
        // MODULE DEFINITION
        // -------------------------------------------------------------------
        function (ko) {

        "use strict";

        return function(){
            var self = this;

            self.First_Arr = ko.observableArray(['arrayItem0', 'arrayItem1', 'arrayItem2', 'arrayItem3']);
            self.Second_Arr = ko.observableArray(['arrayItem0', 'arrayItem1', 'arrayItem2']);

            self.Test = function(widget, event) { 
                var element = event.target;          
                var pathname = location.pathname;
                var anotherArray = [
                    ["/some-url-path", self.First_Arr()],
                    ["/some-other-url-path", self.Second_Arr()]
                ];

                for (var i = 0; i < anotherArray.length; i++) {
                    // Do some stuff and console.log the array items                        
                }    
            }

            self.beforeAppear = function(page) {
                //var widget = this;
                self.Test();    
            }
        }();
    }
);
定义(
//-------------------------------------------------------------------
//依赖关系
//-------------------------------------------------------------------
[“击倒”],
// -------------------------------------------------------------------
//模块定义
// -------------------------------------------------------------------
职能(ko){
“严格使用”;
返回函数(){
var self=这个;
self.First_Arr=ko.observearray(['arrayItem0','arrayItem1','arrayItem2','arrayItem3']);
self.Second_Arr=ko.observearray(['arrayItem0','arrayItem1','arrayItem2']);
self.Test=函数(小部件、事件){
var元素=event.target;
var pathname=location.pathname;
var另一个数组=[
[“/some url path”,self.First_Arr(),
[“/其他url路径”,self.Second_Arr()]
];
对于(var i=0;i
此问题是否已解决,或者您是否仍无法使其正常工作?