【问题标题】:knockout js, add new item to an array淘汰js,将新项目添加到数组中
【发布时间】:2017-10-10 17:36:50
【问题描述】:

所以这是我之前的问题:

knockout js, add additional elements to an array

基本上我有一个应用程序,用户在其中填写某些数据,单击下一步,然后将其添加到数组中。但是,我想做的是在用户开始使用应用程序之前将一些项目添加到数组中(这些项目我从数据库中获取)。这个想法是,一开始他们可以查看数组中的每个项目,然后选择一个项目并编辑该项目。我有一种感觉,我错过了一些非常明显的东西,但我似乎无法弄清楚

【问题讨论】:

  • 你看过淘汰赛教程吗?我建议您将上一个问题的答案作为起点,将 items 数组替换为:self.items = ko.observableArray([ new Item({}), new Item({}) ]),看看会发生什么。
  • 是的,虽然我还是个初学者,但我不明白如何将项目传递到 {} 部分
  • 根据您提供的信息,我们唯一可以回答的问题是“如何将初始项放入可观察数组中”。如果您要尝试解决更复杂的问题,则必须付出一些额外的努力来解释细节,并且需要向我们展示您尝试过的内容。
  • 我确实有一把小提琴(我现在已经弄坏了),挂火会让它进入我展示的状态

标签: javascript jquery html arrays knockout.js


【解决方案1】:

Knockout 可观察数组具有与原生 JavaScript 数组等效的功能。见:http://knockoutjs.com/documentation/observableArrays.html

所以你只需要使用 arr.pop(item) 或 arr.push(item)。

如果您需要替换所有项目并希望避免引发多个事件,请使用 observableArray.valueWillMutate() 和 valueHasMutated() 函数。请参阅我交换整个数组的示例:

ko.observableArray.fn.replaceWith = function (valuesToPush) {
		// NOTE: base on - ko.observableArray.fn.pushAll
		var underlyingArray = this();
		var oldItemcount = underlyingArray.length;

		this.valueWillMutate();

		// adding new items to obs. array
		ko.utils.arrayPushAll(underlyingArray, valuesToPush);

		// removing old items (using KO observablearray fnc.)
		if (oldItemcount > 0)
			this.removeAll(underlyingArray.slice(0, oldItemcount));

		this.valueHasMutated();

		return this;  //optional
	};

【讨论】:

    猜你喜欢
    • 2015-07-14
    • 2014-11-12
    • 1970-01-01
    • 2013-02-24
    • 2019-02-17
    • 2017-10-05
    • 1970-01-01
    • 2015-05-06
    • 2016-02-01
    相关资源
    最近更新 更多