gpt4 book ai didi

javascript - knockout JS : Passing observable array as argument

转载 作者:行者123 更新时间:2023-11-29 22:01:01 27 4
gpt4 key购买 nike

我有一个名为 textFields 的二维可观察数组:

var t1 = ko.observableArray([{val: 0}, {val:0}])
self.textFields = ko.observableArray([t1]);

我有一个名为 solve 的函数,它应该接受一个参数:

self.solve = function(arr){
console.log(arr);
}

在我的 html 中,我将该函数与一个链接点击相关联,该链接点击将 textFields 作为要解决的参数传递:

<a id='solveBtn' href='#' data-bind='click: solve(textFields)'>Solve</a>

我想我现在可以打印出我的 textFields 数组。但是相反,我得到 []。当我在 Chrome 的调试器中查看变量时,我也只看到 []。这是为什么?为什么没有正确传递textFields来解决?

编辑:

我让 js 现在看起来像这样:

self.solve = function(arr){
console.log(arr());
}

但是我想将这个可观察数组传递给另一个函数(应该从中生成一个“普通”数组:

var normalize = function(arr){
var retArr = [];
console.log(arr().length);
for(var i = 0; i < arr.length; i++){
var temp = [];
for(var j = 0; j < arr()[i]().length; j++){
temp.push(arr()[i]()[j].val);
}
console.log(temp);
retArr.push(temp);
}
return retArr;
}

console.log(arr()) 给我以下错误:消息:对象不是函数。当我将 arr 视为普通数组时,永远不会执行 for 循环。我猜那是因为 arr[i] 的长度为 0。

非常感谢您的回答!

托尼

最佳答案

尝试在标记中执行此操作以在求解方法中获取数组值

<a id='solveBtn' data-bind='click: function(){solve(textFields())}'>Solve</a>

或者修改你的脚本如下

self.solve = function(arr){
console.log(arr());
}

快速说明:在您的示例标记中,您正在为点击事件设置一个带有参数的函数。这将导致函数在页面加载期间执行。将它包装在一个功能 block 中总是安全的,如下所示。

<a id='solveBtn' data-bind='click: function(){solve(textFields)}'>Solve</a>

关于javascript - knockout JS : Passing observable array as argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23765186/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com