Knockout.js 敲除映射、初始值和计算值
我一直在构建模型系统,当它发生时,我可能会通过使用映射插件使我的生活更轻松,尽管我面临的问题很少 问题是,我在初始化时没有数据,但我仍然希望为屏幕提供空属性。我通过在初始化时定义模型,然后用值更新模型,实现了这一点Knockout.js 敲除映射、初始值和计算值,knockout.js,knockout-mapping-plugin,Knockout.js,Knockout Mapping Plugin,我一直在构建模型系统,当它发生时,我可能会通过使用映射插件使我的生活更轻松,尽管我面临的问题很少 问题是,我在初始化时没有数据,但我仍然希望为屏幕提供空属性。我通过在初始化时定义模型,然后用值更新模型,实现了这一点 App.Models.User = { name: null, username: null, gender: null, email: null, img: null }; var me = ko.mapping.fromJS(App.Mod
App.Models.User = {
name: null,
username: null,
gender: null,
email: null,
img: null
};
var me = ko.mapping.fromJS(App.Models.User);
这很有效,尽管我不确定这是完成任务的最佳方式
但是现在我想更新img
属性,我还不确定我是想从中创建一个新属性,还是让该属性自己更新,我想知道如何在这两种情况下都能做到
我的服务器数据看起来有点像这样
{"me":
{
"username" :"john",
"email" :"johndoe@gmail.com",
"name" :"John Doe",
"gender" :"male",
"img" :"profile_img_john.jpg"
}
}
我想更新img或从中创建一个新属性,并使其images/profile\u img\u john.jpg
希望所有这些都有意义。我将分离淘汰视图模型创建和初始化部分。它将允许您首先创建没有任何真实数据的视图模型,将其绑定到HTML,然后使用真实数据进行更新 请参见我在此处为您创建的示例:
我使用了一些非常相似的东西,除了我为所有模型创建了一个抽象更新函数,它完成了这项工作,但我的目标是找出是否有可能阻止定义模型,并使用
ko.mapping
插件,该插件将根据服务器的数据定义模型。如果一开始你没有任何数据,我想这是不可能的,这很有道理,但也带走了我从ko.mapping
,anwyay所期望的大部分好处,因为有一段时间没有答案,我会将你的标记为已接受。
var data = { "me":
{
"username" :"john",
"email" :"johndoe@gmail.com",
"name" :"John Doe",
"gender" :"male",
"img" :"profile_img_john.jpg"
}
}
var User = function(data) {
this.name = ko.observable();
this.username = ko.observable();
this.gender = ko.observable();
this.email = ko.observable();
this.img = ko.observable();
this.update(data);
};
ko.utils.extend(User.prototype, {
update: function(data) {
this.name(data.name || "");
this.username(data.username || "");
this.gender(data.gender || "");
this.email(data.email || "");
this.img(data.img || "default-image-url.png");
}
});
//firstly create viewmodel without any data
var user = new User({});
ko.applyBindings(user);
//then set data later
user.update(data.me);