我正在写一个小的javascript游戏...来设置游戏时间,我有变量保存当前游戏中的日期和时间,我想显示这个日期和每一秒,用小时增加该日期。
我正在使用JSViews进行数据绑定,它在应用程序中运行良好,除了那个日期,我不明白!!我创建了一个代表这个想法的JSFiddle:
http://jsfiddle.net/ClaudeVernier/w8cwkarr/5/
try {
var tmplDates = $.templates("#tmplDates");
tmplDates.link("#gameSet", model);
gameLoop();
}
catch(e) {
alert(e);
}
我有一个带有日期和整数的数据模型。 我有一个模板,显示使用转换器的数据模型
<script id="tmplDates" type="text/x-jsrender">
<hr /> <span data-link="{toDateString:gameDate}"></span>
<hr /> <span data-link="{toTimeString:gameDate}"></span>
<hr /> <span data-link="{toString:gameInt}"></span>
</script>
每隔一秒,我用Observable方法更新日期和整数。整数更新但不是日期!
function gameLoop() {
var tDate = model.gameDate;
tDate.addHours(4);
$.observable(model).setProperty("gameDate", tDate);
var tInt = model.gameInt + 1;
$.observable(model).setProperty("gameInt", tInt);
$("#lastUpdate").text( gameDateString(model.gameDate, 0) + "-" + gameDateString(model.gameDate, 6) + " - [" + model.gameInt + "]");
window.setTimeout(gameLoop, 1000);
}
我添加了一行,我在没有数据绑定的情况下写入值,以显示值已更新..
答案 0 :(得分:1)
这里的问题是您每次都传递相同的日期对象。
var tDate = model.gameDate;
tDate.addHours(4);
...
$.observable(model).setProperty("gameDate", tDate);
JsViews setProperty()
提出了一个&#39;更改事件&#39;当您为该路径上的当前值设置不同的值时。 (即,如果您修改模型上gameDate的值)。此处的值与模型中已存在的日期对象相同,因此不会发生更改事件,也不会更新值。
所以一个解决方法是每次都使tDate
成为一个新对象:
var tDate = new Date(model.gameDate);
tDate.addHours(4);
...
$.observable(model).setProperty("gameDate", tDate);
另一个解决方法是让模型上的gameDate成为一个字符串 - Date.valueOf()。
我在这里从你的jsfiddle创建了一个更新: