javascript - observableArray 不更新 UI

标签 javascript jquery knockout.js

我遇到一个问题,即 UI 仅在刷新页面后更新正确的数据。我从这里来observableArray is not defined

我的 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);
                    widget.anotherObservableArray = ko.observableArray();

                    for (var i = 0; i < someArray.length; i++) {
                        var temp = {
                            "prodName": ko.observable(someArray[i])
                        };
                        var myKoObservableArray = widget.anotherObservableArray;
                        myKoObservableArray.push(temp);

                    }
                    console.log(myKoObservableArray());
                    this.myKoObservableArray = myKoObservableArray;
                };
            }
        }
    }
);

我的 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: myKoObservableArray">
        <li>
            <span data-bind="text: prodName"> </span> //this changes only after a refresh
        </li>
    </ul>
</div>

data-bind="text: prodName" 仅在刷新页面后更改值。

最佳答案

在 onLoad 中创建数组一次,然后更新它。不要每次都创建它。

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

                    // empty the array
                    widget.myKoObservableArray([]);

                    for (var i = 0; i < someArray.length; i++) {
                        var temp = {
                            "prodName": ko.observable(someArray[i])
                        };
                        widget.myKoObservableArray.push(temp);

                    }
                    console.log(widget.myKoObservableArray());
                };
            }
        }
    }
);

关于javascript - observableArray 不更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36434173/

相关文章:

javascript - 使用 Azure 中的 Angular 应用程序和 Rest 服务进行 CORS 验证

knockout.js - 如何在knockout.js 模板中访问项目的索引

javascript - 如果存在列表项,则不附加但更改字体颜色

javascript - jQuery-UI 在单击时向右滑动 div

javascript - 如何使用 JQuery 或 JavaScript 删除嵌入的音频

javascript - knockout : Keep track of recursion depth?

knockout.js - 向 Knockout 数字数据绑定(bind)添加十进制格式

javascript - 路由在 Angular.js 中不起作用

javascript - 确定哪个框架(名称)调用了 JavaScript 中的函数

javascript - JS Animate 的两个属性(!JQ)