我目前正在使用Knockout来呈现我的HTML页面,但是当我在将数据存储在一个简单的JSON文件中时尝试渲染我的HTML时,我感到困惑。
Json文件在这里:
{
"name": "Office Web Controls 2014"
}
这里是加载我的Json字符串的函数:
<script type="text/javascript">
function AppViewModel() {
this.data = { };
$.getJSON("Resources/Data/Ribbon.json", function(retrievedData) {
this.data = ko.mapping.fromJSON(retrievedData);
console.log(this.data);
});
}
// Activates knockout.js
ko.applyBindings(new AppViewModel());
</script>
我想将它绑定到以下HTML:
<div data-bind="text: data.name">
</div>
我尝试了很多不同的东西,但都没有,所以如果有人知道如何做到这一点。
答案 0 :(得分:0)
最后,经过长时间的搜索,我找到了解决方案。 对于任何有兴趣的人来说,这里是:
<div data-bind="template: {name: 'OfficeWebControls-Title', data: ribbonViewModel}">
</div>
最后是剧本:
<script type="text/javascript">
var ribbonViewModel;
$.getJSON("Resources/Data/Ribbon.json", function(data) {
ribbonViewModel = ko.mapping.fromJS(data);
ko.applyBindings(ribbonViewModel);
});
</script>
答案 1 :(得分:0)
它不起作用的原因有两个:
实施例
function AppViewModel() {
//remember the this pointer for the call back handler
var self = this;
//set default data to an observable
self.data = ko.observable(null);
$.getJSON("Resources/Data/Ribbon.json", function(retrievedData) {
//use self to reference properties on the vm in a call back handler
self.data(retrievedData);
console.log(self.data());
});
}
ko.applyBindings(new AppViewModel());
为此,视图也需要更改。
<!-- ko if:data -->
<div data-bind="text: data().name"></div>
<!-- /ko -->