#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 = «новый, старый».
Надеюсь, это поможет вам.