Knockout.js与映射对象绑定和订阅属性更改
问题描述:
我有一个JS对象:Knockout.js与映射对象绑定和订阅属性更改
var bookmark = {
id: 'id',
description: 'description',
notes: 'notes'
}
我要绑定到整个对象,在一个textarea显示注释,并且订阅修改笔记。
这是我到目前为止有:
this.bookmark = ko.observable();
this.bookmark.subscribe = function(bookmarkWithNewNotes) {
//use the bookmarkWithNewNotes.id to update the bookmark in the db
}
我设置书签,像这样:
this.bookmark(ko.mapping.fromJS(existingBookmark));
的看法是这样的:
<div databind="with: $root.bookmark" >
Notes
<textarea class="userNotes" rows="10" data-bind="value: notes" ></textarea>
</div>
这ISN”不工作。我需要做些什么才能按照我希望的方式工作?
谢谢!
答
以下是Fiddle中的示例。
你可以做这样的事情:
<div>
Notes
<div data-bind="foreach: bookmarks">
<textarea rows="10" data-bind="value: note"></textarea>
</div>
</div>
,并为你的书签创建视图模型,就像这样:
function BookmarkViewModel(id, description, note) {
var self = this;
self.id = id;
self.description = ko.observable(description);
self.note = ko.observable(note);
self.note.subscribe(function(val) {
alert("Save note, id: " + self.id + ", description: " + self.description() + ", note: " + self.note());
});
return self;
}
你得到您的数据后,为每个项目创建虚拟机,像这样:
function AppViewModel(data) {
var self = this;
self.bookmarks = ko.observableArray();
for (var i = 0; i < data.length; i++) {
self.bookmarks().push(new BookmarkViewModel(data[i].id, data[i].description, data[i].note));
};
return self;
}
可以CRE吃了一个单独的服务来获取你的数据,我只是嘲笑了这个poc。
$(function() {
var data = [{
id: 1,
description: 'some description',
note: 'some note'
}, {
id: 2,
description: 'some other description',
note: 'some other note'
}];
ko.applyBindings(new AppViewModel(data));
});
+1
谢谢。这让我走上了正轨,并且我能够实施一个工作解决方案。 – MayNotBe
请使用Stack Snippets(''工具栏按钮)使用** runnable ** [mcve]更新您的问题,以便我们可以在上下文中轻松查看问题并帮助您解决问题。 –
我只是试图和我不能让外部映射文件正常工作。很累。我会在早上再试一次。 – MayNotBe
顺便说一句,它的数据绑定=“”不databind =“” – Joonas89