2016-10-19 4 views
0

Я новичок в нокауте, поэтому, пожалуйста, простите мое невежество.Knockoutjs: Разделить строку на массив строки

Это мой knockout.js файл:

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

Но я получаю эту ошибку:

Cannot read property 'toString' of undefined

Я пробовал:

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

Но ничего не работает. Пожалуйста помоги.

Относительное примечание: Как я могу разделить строку на массив на основе запятой или строки?

+0

вы можете разделить вывод 'console.log (TYPEOF self.names)'? – gurvinder372

+0

он печатает «function» – 90abyss

+0

Что такое вывод console.log (typeof self.names())? – gurvinder372

ответ

2

Вы можете использовать вычисленный для того, чтобы получить recalculable результат: использование

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"] 
0

Здесь ваша наблюдаемым правильно не обновляется с строковыми значениями.

Посмотрите на приведенный ниже код.

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 ("новые строки, старые струны), а не как self.names = "новый, старый".

Надеюсь, что это поможет вам

1

если вы еще потому оценивали self.names() == undefined и неопределенный тип не имеют ToString свойства;)

попробуйте вместо этого:.

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

или

(self.names()||'').split(","); 
Смежные вопросы