Knockoutjs: разбить строку на массив строк

#javascript #knockout.js

#javascript #knockout.js

Вопрос:

Я новичок в knockout, поэтому, пожалуйста, простите мое невежество.

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

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

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

Не удается прочитать свойство ‘toString’ неопределенного

Я пытался:

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

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

В соответствующем примечании: как я могу разделить строку на массив на основе запятой или разрыва строки?

Комментарии:

1. можете ли вы поделиться выводом console.log(typeof self.names) ?

2. он выводит «функцию»

3. каков вывод console.log(тип self.names())?

4. попробуйте self.names = ko.observable('');

5. причиной typeof self.names() было undefined

Ответ №1:

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

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

Пример использования:

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

Ответ №2:

потому что, если вы оценили self.names() == undefined и неопределенный тип не имеют свойства toString 😉

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

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

или

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

Ответ №3:

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

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

     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 = «новый, старый».

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