javascript - 如何从 knockout 数组中选取索引值

标签 javascript arrays knockout.js

我想查找带有索引变量“id”的数组 availableItems。 这是我的代码片段:

function Item(id, category, name, selected ) {
    var self = this;

    self.id = ko.observable(id); 
    self.Category = ko.observable(category); 
    self.Name = ko.observable(name);
    self.Selected = ko.observable(selected);   
}

function ViewModel() {
    var self = this;

    self.availableItems = ko.observableArray();

    self.init = function (){
       self.availableItems.push(new Item(1, "A", "Hello", false));
       self.availableItems.push(new Item(2, "A", "Hi", true));
       self.availableItems.push(new Item(3, "A", "Bye", false));
    }

    self.id = ko.observable(1);
}

var viewModel = new ViewModel();
ko.applyBindings(viewModel);
viewModel.init();

为什么以下 HTML 行不起作用?

Indexed line: <span data-bind="text: $root.availableItems()[$root.id()].Selected()"></span>;    

最佳答案

因为您必须在绑定(bind) View 模型之前初始化它。

这会起作用:

var viewModel = new ViewModel();
viewModel.init();
ko.applyBindings(viewModel);

当您调用 applyBindings 时,Knockout 会尝试解析并应用您的绑定(bind)。但到那时你的 availableItems 数组仍然是空的,因此你得到了异常。

关于javascript - 如何从 knockout 数组中选取索引值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23351118/

相关文章:

javascript - 有没有办法为 Jasmine 单元测试(Angular 4)提供基类?

Javascript 嵌套原型(prototype)方法范围

javascript - Javascript 中最大的回文积

javascript - knockout : Unable to process binding

asp.net-mvc-3 - 发布一个无法与 DefaultModelBinder 一起使用的 Javascript 数组?

javascript - Angular $http 服务,如何取消/取消订阅待处理的请求?

javascript - 数组存储javascript

c - 打印数组中的第一个索引会使用 C 打印每个索引

arrays - ElasticSearch-Kibana:按键过滤数组

autocomplete - Knockout.js 文本框值绑定(bind)自动完成