Это не ошибка, но я не могу понять, что происходит.Проблема с прототипом нокаута JS
Я хочу отобразить определенный набор друзей при загрузке страницы. И затем, когда нажата кнопка Add Friend
,
должно добавить новых друзей по имени SpaceX
. Это происходит.
Но я не могу понять, почему в нем также указан друг с именем SpaceX
.
вот фрагмент кода.
просмотр HTML
<!-- This is a *view* - HTML markup that defines the appearance of your UI -->
<ul data-bind="foreach:friends">
<li>
<strong data-bind="text: friendName"></strong>
<input type="checkbox" data-bind="checked: knowJS" />
<input data-bind="value: favLib,visible: knowJS" />
<button data-bind="click: removeFriend">X</button>
</li>
</ul>
<button data-bind="click: addFriend('SpaceX')">Add Friend</button>
ViewModel - JavaScript
//Create a sample JS Class
function Friend(name) {
this.friendName = name;
this.knowJS = ko.observable(false);
this.favLib = ko.observable('');
this.removeFriend = function() {
obj.friends.remove(this);
};
};
// This is a simple *viewmodel* - JavaScript that defines the data and behavior of your UI
//Create an object type using constructor function
function AppViewModel(){
this.friends = ko.observableArray([new Friend("Chiranjib"), new Friend("Nandy")]);
};
//Add a property to the prototype of the object type
AppViewModel.prototype.addFriend= function(fname){
this.friends.push(new Friend(fname));
};
//Create a specific object out of the object type defined
var obj = new AppViewModel();
// Activates knockout.js
ko.applyBindings(obj);
Выход на странице загрузки выглядит
Но SpaceX
следует добавлять только при нажатии кнопки Add Freind
. Что я делаю не так ?
означает, что события щелчка в идеале должны быть названы так, как вы показали. В противном случае это может быть беспорядок, не так ли? – StrugglingCoder
Избегайте создания функций в коде привязки. Это плохой стиль. Лучше ссылаться на функции, которые уже имеет ваша модель просмотра. – Tomalak
Совсем нет. У вас может быть другое поле ввода, которое вы связываете с 'newFriendName = ko.observable()', а затем используйте это в обработчике событий addFriend, которое теперь можно привязать непосредственно к функции щелчка. В идеале вы хотите, чтобы ваше представление было максимально чистым. –