【发布时间】:2011-11-09 12:33:00
【问题描述】:
我有this fiddle 有以下观点:
<ul id="modules">
<li id="modulePersonal" data-bind="template: 'personalDataTemplate'"></li>
<li id="moduleAccounts" data-bind="template: 'accountsDataTemplate'"></li>
</ul>
<script type="text/x-jquery-tmpl" id="personalDataTemplate">
<h3 class="klavikaBold">Your Details</h3>
<div class="content">
{{if loggedIn}}
<p>This is what you've been telling us:</p>
<dl class="pairDefinition">
<dt>Name</dt>
<dd>${name}</dd>
<dt>Gender</dt>
<dd>${gender}</dd>
<dt>Age</dt>
<dd>${age}</dd>
<dt>Country</dt>
<dd>${country}</dd>
</dl>
</div>
{{else}}
<p>Hey, you Alpha male! Come here
and give us all of your personal
data! We promise we won't give it
for free to anybody!</p>
{{/if}}
</div>
</script>
<script type="text/x-jquery-tmpl" id="accountsDataTemplate">
<h3>Your accounts</h3>
<div class="content">
<p> There are 2 messages from Yahoo, 1 from Lumosity and 5 from Tweetland</p>
<ul class="listSeparated line">
<li>
<dl class="pairDefinition">
<dt>Yahoo</dt>
<dd><a href="#">Account Details</a></dd>
<dt>Email</dt>
<dd>blabisbla@yahoo.com</dd>
</dl>
</li>
<li>
<dl class="pairDefinition">
<dt>Lumosity</dt>
<dd><a href="#">Account Details</a></dd>
<dt>Username</dt>
<dd>ilovetheiradds</dd>
</dl>
</li>
<li>
<dl class="pairDefinition">
<dt>Tweet Land</dt>
<dd><a href="#">Account Details</a></dd>
<dt>Username</dt>
<dd>costaricangamer</dd>
<dt>Games</dt>
<dd>Lovecity, CarRace, Unit</dd>
</dl>
</li>
</ul>
</div>
</script>
还有这段代码:
(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 个lis,每个都包含不同的数据(因此它们共享一个视图的想法不太可能)。数据来自供应商,因此他们可以在认为合适时更改名称和顺序。
您会看到一个模板存储了它可能具有的不同状态。我的问题是,你认为这是一种安全的方法吗?毕竟,真正的数据是由 Ajax 请求提供的(这里由硬编码的 JSON userDetails 表示)。
此外,设置决定流量的变量的最灵活方法是什么? (例如loggedIn : "yeah",如果你删除它,就会显示另一个视图)。在这里,我在 viewModel 中对它们进行编码,但它们实际上可以在外部编码......这是正确的方法还是我错过了淘汰赛?我从来没有在前端处理过 MVVM 框架,所以我可能有点困惑。
【问题讨论】:
-
奥斯卡 - 你能把你的问题归结为它的本质吗?
-
你想知道什么?
-
是的,当然。基本上问题是......如果我有两个或多个由全局变量(用户的计算机品牌,他是否登录等)确定的状态,我应该在哪里设置该变量,以便淘汰赛呈现正确的数据?
标签: javascript mvvm knockout.js