绑定observable的子属性时,未获取View中的所有值
Not getting all values in View when binding children properties of observable
在我的敲除绑定视图中,我没有得到所有值。
这是我的脚本文件:
var ViewModel = function () {
var self = this;
self.games = ko.observableArray();
self.error = ko.observable();
self.detail = ko.observable();
var gamesUri = '/api/games/';
self.getGameDetail = function (item) {
ajaxHelper(gamesUri + item.Id, 'GET').done(function (data) {
self.detail(data);
});
console.log(self.detail);
};
function ajaxHelper(uri, method, data) {
self.error('');
return $.ajax({
type: method,
url: uri,
dataType: 'json',
contentType: 'application/json',
data: data ? JSON.stringify(data) : null
}).fail(function (jqXHR, textStatus, errorThrown) {
self.error(errorThrown);
});
}
function getAllGames() {
ajaxHelper(gamesUri, 'GET').done(function (data) {
self.games(data);
});
}
getAllGames();
};
ko.applyBindings(new ViewModel());
这是我的观点:
<div class="row">
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">Games</h2>
</div>
<div class="panel-body">
<ul class="list-unstyled" data-bind="foreach: games">
<li>
<strong><span data-bind="text: DeveloperName"></span>:<span data-bind="text: Title"></span></strong>
<small><a href="#" data-bind="click: $parent.getGameDetail">Details</a></small>
</li>
</ul>
</div>
</div>
<div class="alert alert-danger" data-bind="visible: error"><p data-bind="text: error"></p></div>
</div>
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-heading"><h2 class="panel-title">Details</h2></div>
</div>
<table class="table">
<tr><td>Developer</td><td data-bind="text: detail().DeveloperName"></td></tr> //Only this value is displayed
<tr><td>Title</td><td data-bind="text: detail().Title"></td></tr>
<tr><td>Price</td><td data-bind="text: detail().Price"></td></tr>
<tr><td>Genre</td><td data-bind="text: detail().Genre"></td></tr>
<tr><td>Year</td><td data-bind="text: detail().Year"></td></tr>
</table>
</div>
<div class="col-md-4">
</div>
</div>
问题是它只在视图中显示DeveloperName
。Title
、Price
、Genre
和Year
未在视图中显示。我尝试了很多方法,但我不知道错误在哪里。
有两种方法。
最简单的方法是使用with
或template
绑定。该技术类似,但我将展示一个具有with
绑定的示例:
<table class="table" data-bind="with: details">
<tr><td>Developer</td><td data-bind="text: DeveloperName"></td></tr>
<tr><td>Title</td><td data-bind="text: Title"></td></tr>
<tr><td>Price</td><td data-bind="text: Price"></td></tr>
<tr><td>Genre</td><td data-bind="text: Genre"></td></tr>
<tr><td>Year</td><td data-bind="text: Year"></td></tr>
</table>
使用此技术,无论何时更改details
可观察对象内的对象,新值都会应用于具有with
绑定的elment内的子元素。在这种情况下,CCD_ 11元素内部的所有元素。此外,语法更短、更清晰注意:如果需要绑定与with
绑定的对象之外的内容,则必须使用$parent
、$parents[]
或$root
最困难的是,只有当你的视图模型更复杂并且具有计算的可观察性时,这才是必要的,例如,你需要创建一个属性也是可观察器的对象。在这种情况下,您绑定该对象一次,然后在接下来的情况下,更新innser可观测属性,而不是更改对象本身。
对于您的示例,您必须创建一个对象,该对象的所有属性(如DeveloperName
、Title
、Price
等)都定义为可观察性。然后,您必须将AJAX恢复的值映射到此属性,您可以手动、执行details().DeveloperName(newDetails.DeveloperName)
等操作,也可以使用ko.mapping插件。
重要提示:如果使用此技术,则必须保留原始details
绑定对象,并更新其属性。如果用新对象替换details
对象本身,则绑定将丢失,并将根据需要停止工作
另一个注意事项:您不能使用cleanNodes来处理您的想法。请看这个问答;A.
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jquery试图按名称获取按钮位置
- 如何在jQuery中获取元素的形式
- 如何在php文件中获取$.post-ajax传递的值
- 在Shopify中获取博客文章的图片
- 使用Javascript获取所选选项ID
- 在jQuery中获取表的行索引
- 使用jquery将mysql数据获取到新的表行中
- 在动态创建的元素上获取对特定选择器的引用
- 从城市名称获取惊喜
- Angular只从数组中获取所需的数据
- 如何在asp.net MVC中从View获取值到JavaScript
- 如何在 NativeScript 中获取对 self.view 和 self.view.frame 的引用
- Django View 无法使用请求获取文件.来自 ajax 表单的文件提交
- X-editable with ASP MVC View,如何将提交的表单POST操作获取到控制器
- 在Controller的init函数中获取View组件
- AngularJS-View从StateProvider获取未定义的数据
- 绑定observable的子属性时,未获取View中的所有值
- 在Backbone.View中获取模板的计算CSS属性
- Box node js Api (view-box)不能获取文档