【发布时间】:2012-12-10 11:09:18
【问题描述】:
我有一个如下视图模型:
define(
['jquery', 'knockout', 'knockout.mapping', 'data/data', 'models/models'],
function ($, ko, mapping, data, models) {
var post = {},
getPost = function (param) {
$.when(data.deferredRequest('postDetail', param.id))
.done(function (result) {
mapping.fromJS(result, {}, post);
console.log(result.title === post.title()); // ---> this is true
console.log(ko.isObservable(post.title)); // ---> this is true
});
};
return {
post : post,
getPost: getPost
};
});
我想在 html 中显示 title 属性如下:
<section id="section-post-detail" class="view" >
<div class="page-header">
<h3 data-bind="text: post.title"></h3> <!-- show nothing -->
<h3 data-bind="text: post().title"></h3> <!-- error -->
<h3 data-bind="text: post.title()"></h3> <!-- error -->
</div>
</section>
我尝试了三种显示 title 属性的方法,但都失败了。 我错过了什么吗?
编辑
我对源代码进行了如下调整。 我在 viewmodel 上添加了 title 属性并在 getPost 中对其进行了更新,然后我成功访问了 viewmodel 的 title 属性,而不是 post 模型上的 title 属性。
define(
['jquery', 'knockout', 'knockout.mapping', 'data/data', 'models/models'],
function ($, ko, mapping, data, models) {
var post = {},
title = ko.observable(''),
getPost = function (param) {
$.when(data.deferredRequest('postDetail', param.id))
.done(function (result) {
mapping.fromJS(result, {}, post);
title(post.title());
console.log(result.title === post.title()); // ---> this is true
console.log(ko.isObservable(post.title)); // ---> this is true
});
};
return {
post : post,
title : title,
getPost: getPost
};
});
<section id="section-post-detail" class="view" >
<div class="page-header">
<h3 data-bind="text: title"></h3>
</div>
</section>
但是,如您所见, data-bind="text: title" 不是 post 上的 title 属性,而是 viewmodel 上的 title 属性。这不是我想要的。我想访问 post 对象的 title 属性。
请纠正我的做法。
【问题讨论】:
标签: knockout.js