我有一个视图模型如下:
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>
我尝试了三种方法来显示标题属性,但是所有这些都失败了。我错过了什么吗?
已编辑
我调整了源代码如下。我在 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 属性。
请纠正我的做法。