我正在为游戏做一个javascript应用程序,目标是为MMORPG制作一个“构建计算器”。我想将视图与我的应用程序中已存储的数据同步。我搜索并测试了不同的框架,而knockout-js似乎是我最好的解决方案
HTML:
<script>
var simulatorTool = new SimulatorTool();
</script>
<body>
<p data-bind="text: test"> </p>
<p data-bind="text: test2"> </p>
</body>
Javascript工具:
function SimulatorTool()
{
meSim = this;
this.config = new Config();
this.data = new Data();
this.stuff = new Stuff();
this.traits = new Traits();
this.view = new AppViewModel();
$(function(){
ko.applyBindings(meSim.view);
});
... functions
}
查看型号:
function AppViewModel() {
this.test = "Test!";
this.test2 = ko.computed(function() {
return meSim.data.selectedData['profession']
}, this);
}
问题是我不知道如何将html绑定到另一个对象的视图中。我甚至不知道是否可能。我想做那样的事情
<p data-bind="simulatorTool.view, text: test"> </p>
如果没有,如果视图与应用程序分离,我如何访问“SimulatorTool”中的数据?
答案 0 :(得分:0)
我认为你想要做的就是这样 - 让我们在simulator_tool.js中说:
var SimulatorTool = SimulatorTool || {};
SimulatorTool.ViewModel = function(initialData){
//bindings etc
};
SimulatorTool.Start - function(initialData){
var viewModel = SimulatorTool.ViewModel(initialData);
ko.applyBindings(viewModel);
return viewModel //if you want to play with it in the console...
};
然后,在您的页面上:
<script>
$().ready(function()){
var payload = @Html.Raw(ViewBag.SimulatorJSON);
SimulatorTool.Start(payload);
}
</script>
理想情况下,您可能有一个已经设置了SimulatorTool命名空间的application.js文件,因此您可以删除声明。我不知道JSON转储是否已经设置了配置,或者它是否设置在其他地方 - 但通常这都使用函数或其他属于它自己的命名空间:
SimulatorTool.Config = {
}
SimulatorTool.Stuff = {
}
//etc