Javascript observableArray未定义

Javascript observableArray未定义,javascript,jquery,html,knockout.js,Javascript,Jquery,Html,Knockout.js,我在客户开发环境中工作,必须遵守他们的编码标准。我有下面的JS和HTML。我的耳环没有定义。我不能让它工作。甚至console.log也在打印正确的值 请不要担心ko.applyBindings。它被处理好了 我的JS代码: define( ['knockout'], function (ko) { "use strict"; return { onLoad: function (widget) {

我在客户开发环境中工作,必须遵守他们的编码标准。我有下面的JS和HTML。我的耳环没有定义。我不能让它工作。甚至console.log也在打印正确的值

请不要担心
ko.applyBindings
。它被处理好了

我的JS代码:

define(
    ['knockout'],
    function (ko) {
        "use strict";
        return {
            onLoad: function (widget) {
                widget.getDetails= function (prod) {
                    var abc = prod.DetailsNumbers();
                    console.log(abc);
                    var someArray= [];
                    someArray= abc.split(',');
                    //console.log(someArray);
                    var anotherObservableArray = ko.observableArray();

                    for (var i = 0; i < someArray.length; i++) {
                        var temp = {
                            "prodName": ko.observable(someArray[i])
                        };
                        anotherObservableArray.push(temp);
                    }
                    console.log(anotherObservableArray());
                };
            }
        }
    }
);
定义(
[“击倒”],
职能(ko){
“严格使用”;
返回{
onLoad:函数(小部件){
widget.getDetails=函数(prod){
var abc=prod.DetailsNumbers();
控制台日志(abc);
var someArray=[];
someArray=abc.split(',');
//log(someArray);
var anotherobservearray=ko.observearray();
for(var i=0;i
我的HTML代码:

<div id="someId">
    <table>
        <tbody>
            <tr>
                <td>Button Here</td>
                <td><button data-bind="click: getDetails(product())">Click me</button></td> 
            </tr>// this here is working fine
        </tbody>
    </table>
    <ul data-bind="foreach: anotherObservableArray"> // this doesnt work
        <li>
            <span data-bind="text: prodName"> </span>
        </li>
    </ul>
</div>

按钮在这里
点击我
//这个很好用
    //这不起作用
未定义另一个ObservableArray


Move
var anotherobservearray=ko.observearray()到您的VM定义,并确保它是公开的(即“公共的”)。我想象你有这样的东西:

var vm = {
    // ...
    // most likely you are exposing getDetails() already 
    // .... 

    anotherObservableArray: ko.observableArray()
};

// ...

ko.applyBindings(vm);

Move
var anotherobservearray=ko.observearray()到您的VM定义,并确保它是公开的(即“公共的”)。我想象你有这样的东西:

var vm = {
    // ...
    // most likely you are exposing getDetails() already 
    // .... 

    anotherObservableArray: ko.observableArray()
};

// ...

ko.applyBindings(vm);

您不能在声明它的函数范围之外公开另一个ObservableArray。基本上,您的代码采用以下格式:

{
  onLoad: function (widget) {
    widget.getDetails = function (prod) {
      var anotherObservableArray = ko.observableArray();
      // push some items into the array
      console.log(anotherObservableArray());
    };
  }
}
您需要以某种方式将
另一个ObservableArray
暴露在函数之外。例如:

{
  onLoad: function (widget) {
    widget.getDetails = function (prod) {
      var anotherObservableArray = ko.observableArray();
      // push some items into the array
      console.log(anotherObservableArray());
      this.anotherObservableArray = anotherObservableArray; // Expose it on the function
    };
  }
}

您不能在声明它的函数范围之外公开另一个ObservableArray。基本上,您的代码采用以下格式:

{
  onLoad: function (widget) {
    widget.getDetails = function (prod) {
      var anotherObservableArray = ko.observableArray();
      // push some items into the array
      console.log(anotherObservableArray());
    };
  }
}
您需要以某种方式将
另一个ObservableArray
暴露在函数之外。例如:

{
  onLoad: function (widget) {
    widget.getDetails = function (prod) {
      var anotherObservableArray = ko.observableArray();
      // push some items into the array
      console.log(anotherObservableArray());
      this.anotherObservableArray = anotherObservableArray; // Expose it on the function
    };
  }
}

@用户3297291,已经处理好了。我注意到你添加了它,所以我删除了我的评论。您的问题并没有真正弄清楚HTML的绑定上下文是什么
getDetails
创建一个名为
anotherObservableArray
的可观察数组,但它只存在于该方法的作用域内。@user3297291如何使其成为一个全局作用域数组?您的单击处理程序是否已经工作了?如果是,则意味着您当前的绑定上下文是
widget
。如果要使其全局化,它必须位于您在
applyBindings
中使用的视图模型中。然后,您可以通过
foreach
绑定中的
$root.anotherObservableArray
访问它。您还必须重写
getDetails
方法。也许可以阅读更多关于MVVM和knockout的最佳实践。这有帮助吗?是的,单击处理程序工作正常。如何修改代码使其成为全局范围?你展示的例子或东西?@user3297291,已经处理好了。我注意到你添加了它,所以我删除了我的评论。您的问题并没有真正弄清楚HTML的绑定上下文是什么
getDetails
创建一个名为
anotherObservableArray
的可观察数组,但它只存在于该方法的作用域内。@user3297291如何使其成为一个全局作用域数组?您的单击处理程序是否已经工作了?如果是,则意味着您当前的绑定上下文是
widget
。如果要使其全局化,它必须位于您在
applyBindings
中使用的视图模型中。然后,您可以通过
foreach
绑定中的
$root.anotherObservableArray
访问它。您还必须重写
getDetails
方法。也许可以阅读更多关于MVVM和knockout的最佳实践。这有帮助吗?是的,单击处理程序工作正常。如何修改代码使其成为全局范围?一个例子或你展示的东西?解决了这个问题…但是我面临一个新的问题。看这里,修复了这个问题…但是我面临一个新问题。看这里