Knockoutjs:将字符串拆分为字符串数组

时间:2016-10-19 07:24:42

标签: javascript knockout.js

我是淘汰赛的新手所以请原谅我的无知。

这是我的knockout.js文件:

/business/-KUNqai...

但是我收到了这个错误:

  

无法读取未定义的属性'toString'

我试过了:

self.names = ko.observable(); // john, mary, jimmy
var arrNames= new Array();
arrNames = self.names().toString().split(",");

但没有任何作用。请帮忙。

相关说明:如何根据逗号或换行符将字符串拆分为数组?

3 个答案:

答案 0 :(得分:2)

您可以使用computed来获得可重复计算的结果:

self.names = ko.observable(); // john, mary, jimmy
self.arrNames = ko.computed(function() { return self.names() && self.names().split(",") || []; });

样本用法:

var a = self.arrNames() // a = []
self.names("john,mary,jimmy");
var b = self.arrNames() // b = ["john", "mary", "jimmy"]

答案 1 :(得分:1)

因为如果您评估self.names() == undefined且未定义的类型没有toString属性;)

尝试改为:

self.names = ko.observable("");

(self.names()||'').split(",");

答案 2 :(得分:0)

此处,您的observable未使用字符串值正确更新。

请查看以下代码。

    self.names = ko.observable(); 
    self.names('john, mary, jimmy');
    var arrNames= new Array();
    arrNames = self.names().toString().split(",");
    console.log(arrNames);

如果你想更新self.name,它应该像这个self.names(“new strings,old strings”)更新,而不是像self.names =“new,old”。

希望这会对你有所帮助。