Javascript 在Knockout.js中正确处理模板和视图的方法
我有以下看法:Javascript 在Knockout.js中正确处理模板和视图的方法,javascript,mvvm,knockout.js,Javascript,Mvvm,Knockout.js,我有以下看法: 你的细节 {{if loggedIn}} 这就是你一直在告诉我们的: 名称 ${name} 性别 ${性别} 年龄 ${age} 国家 ${country} {{else} 嘿,你这个大男人!过来 给我们你所有的个人信息 数据!我们保证不会给它 对任何人都是免费的 {{/if} 你的帐户 有2条来自雅虎,1条来自Lumosity,5条来自Tweetland 雅虎 电子邮件 blabisbla@yahoo.com 动动脑 用户名 伊洛维特补充道 推特土地 用户名
你的细节
{{if loggedIn}}
这就是你一直在告诉我们的:
名称
${name}
性别
${性别}
年龄
${age}
国家
${country}
{{else}
嘿,你这个大男人!过来
给我们你所有的个人信息
数据!我们保证不会给它
对任何人都是免费的
{{/if}
你的帐户
有2条来自雅虎,1条来自Lumosity,5条来自Tweetland
-
雅虎
电子邮件
blabisbla@yahoo.com
-
动动脑
用户名
伊洛维特补充道
-
推特土地
用户名
肋动脉造影剂
游戏
洛夫城,卡拉斯,单位
该代码:
(function($) {
var userDetails = {
"name": "Óscar Acuña",
"country": "Costa Rica",
"province": "San José",
"district": "San Andrés",
"zip": "123456",
"birthday": "12/12/1990",
"gender": "Male",
"hotnessIndex": "6.8",
"smell": "Nice if not sweaty"
};
// Overall viewmodel for this screen, along with initial state
var viewModel = {
loggedIn : "yeah",
name: userDetails.name,
country: userDetails.country,
province: userDetails.province,
gender: userDetails.gender,
age: getAgeSortOf(userDetails.birthday) + " years old"
};
ko.applyBindings(viewModel);
function getAgeSortOf(birthday) {
return new Date().getFullYear() - new Date(birthday).getFullYear();
}
})(jQuery);
请注意,我为第一个li详细阐述了模板
让我们想象一下,可能有多达10个li
s,每个都包含不同的数据(因此不太可能想到它们共享一个视图)。数据来自供应商,因此他们可以在认为合适时更改名称和订单
您可以看到一个模板存储了它可能具有的不同状态。我的问题是,你认为这是一种安全的方法吗?毕竟,真正的数据是由Ajax请求提供的(这里由硬编码的JSON userDetails表示)
另外,设置决定流量的变量最灵活的方法是什么?(例如loggedIn:“yeah”,如果删除它,将显示另一个视图)。在这里,我在viewModel中对它们进行编码,但实际上它们可以在外部进行编码。。。这是正确的方法还是我误用了击倒?我从来没有在前端处理过MVVM框架,所以我可能有点困惑。看起来您想使用
ko.observearray()
保存用户详细信息。如果我理解正确的话,您需要多个li
元素,每个UserDetails
元素对应一个从ajax调用返回的元素。您的视图模型如下所示:
viewModel = {
loggedIn: ko.observable(true),
users: ko.observableArray([])
}
然后通过调用viewModel.users.push(newUser)
用于枚举用户的模板:
<ul data-bind="template:{name:'userTmpl', foreach:users}"></ul>
Oscar-你能把你的问题归结为它的本质吗?你想知道什么?当然可以。基本上问题是。。。如果我有两个或两个以上的状态是由全局变量(用户的计算机品牌、是否登录等)决定的,我应该在哪里设置该变量,以便knockout呈现正确的数据?谢谢!这就是我想要的解释!