- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个像这样的 View 模型
function AppViewModel() {
var self = this;
self.blogUpdate = ko.observableArray();
}
var vm = new AppViewModel();
$(document).ready(function () {
$.getJSON('/Blog/GetUpdates?id=89', function (response) {
vm.blogUpdate = ko.observableArray(response);
ko.applyBindings(vm);
});
});
<table>
<thead>
<tr><th>First name</th><th>Last name</th></tr>
</thead>
<tbody data-bind="foreach: blogUpdate">
<tr>
<td data-bind="text: title"></td>
<td data-bind="text: body"></td>
</tr>
</tbody>
</table>
我有一个按钮,可以打开带有表单输入的动态创建的模式/对话框。提交时,它通过 ajax 发回,并且在成功函数上我尝试推送新创建的 JSON。
$.ajax({
type: 'POST',
global: false,
url: '/Blog/NewUpdate',
data: $form.serialize(),
success: function (response) {
vm.blogUpdate.push(response)
}
});
如果我访问该数组,我可以在那里看到它,但界面不会更新。我看到的示例在按钮上使用 data-bind="click: updateFunc"
。但我的按钮只是打开一个模式,让您输入文本并使用 ajax 发回。
我怎样才能让它发挥作用?
最佳答案
https://jsfiddle.net/wvwh2x3n/1/
我认为您需要在推送到可观察数组之前解析响应。可能看起来像......
success: function (response) {
var parsed = JSON.parse(response);
vm.blogUpdate.push(new BlogPost{ parsed.prop1, parsed.prop2 })
}
var BlogPost = function(prop1, prop2) {
var self = this;
self.prop1 = ko.observable(ko.utils.unwrapObservable(prop1));
self.prop2 = ko.observable(ko.utils.unwrapObservable(prop2));
}
您应该使用 data-bind="modal: xyz"如 fiddle 中所示。只是不要忘记所有绑定(bind)设置工作等。
关于新项目的标记...如果您有一个 foreach 设置的 observableArray,那么它应该只是推送到它的情况。如果您有一些代码,我们可以看到,我会尽力提供帮助。
我喜欢 knockout :D
HTML
<div class="row">
<div class="col-sm-6 col-sm-offset-3">
<ul data-bind="foreach: Users" class="list-group hover">
<li class="list-group-item">
<div class="row">
<div class="col-xs-6">
</div>
<div class="col-xs-2">
</div>
<div class="col-xs-4 text-right">
<a href="#" data-bind="click: $parent.EditUser">Show modal</a> |
</div>
</div>
</li>
</ul>
</div>
</div>
<div data-bind="modal: UserBeingEdited" class="fade" role="dialog" tabindex="-1">
<form>
<div class="modal-header">
<a class="close" data-dismiss="modal">×</a>
<h3>User Details</h3>
</div>
<div class="modal-body">
<div class="form-group">
<label for="NameInput">Name</label>
<input type="text" class="form-control" id="NameInput" placeholder="User's name" data-bind="value: UserBeingEdited() && UserBeingEdited().Name, valueUpdate: 'afterkeydown'">
</div>
<div class="form-group">
<label for="AgeInput">Age</label>
<input type="text" class="form-control" id="AgeInput" placeholder="User's age" data-bind="value: UserBeingEdited() && UserBeingEdited().Age, valueUpdate: 'afterkeydown'">
</div>
<!-- /ko -->
</div>
<div class="modal-footer">
<button type="button" data-dismiss="modal" class="btn btn-default">Cancel</button>
<button type="submit" class="btn btn-primary">Save Changes</button>
</div>
</form>
</div>
CSS
/**** These styles are here to override the styles in 'bootstrap-modal-bs3patch.css' ****/
$screen-sm-min = 768px; //<== Standard Bootstrap width
.modal {
left: 25%;
width: 50% !important;
@media screen and (-webkit-min-device-pixel-ratio:0) {
/* Safari and Chrome */
left: 50%;
width: 500px;
}
@media (max-width: $screen-sm-min) {
left: 0;
width: 100% !important;
}
}
JS
ko.bindingHandlers['modal'] = {
init: function(element, valueAccessor, allBindingsAccessor) {
var allBindings = allBindingsAccessor();
var $element = $(element);
$element.addClass('hide modal');
if (allBindings.modalOptions && allBindings.modalOptions.beforeClose) {
$element.on('hide', function() {
var value = ko.utils.unwrapObservable(valueAccessor());
return allBindings.modalOptions.beforeClose(value);
});
}
},
update: function(element, valueAccessor) {
var value = ko.utils.unwrapObservable(valueAccessor());
if (value) {
$(element).removeClass('hide').modal('show');
} else {
$(element).modal('hide');
}
}
};
/* ViewModel for the individual records in our collection. */
var User = function(name, age) {
var self = this;
self.Name = ko.observable(ko.utils.unwrapObservable(name));
self.Age = ko.observable(ko.utils.unwrapObservable(age));
}
/* The page's main ViewModel. */
var ViewModel = function() {
var self = this;
self.Users = ko.observableArray();
// The instance of the user currently being edited.
self.UserBeingEdited = ko.observable();
// Used to keep a reference back to the original user record being edited
self.OriginalUserInstance = ko.observable();
self.EditUser = function(user) {
// Keep a copy of the original instance so we don't modify it's values in the editor
self.OriginalUserInstance(user);
// Copy the user data into a new instance for editing
self.UserBeingEdited(new User(user.Name, user.Age));
}
}
var viewModel = new ViewModel();
// Populate the ViewModel with some dummy data
for (var i = 1; i <= 10; i++) {
var letter = String.fromCharCode(i + 64);
var userName = 'User ' + letter;
var userAge = i * 2;
viewModel.Users.push(new User(userName, userAge));
}
// Let Knockout do its magic!
ko.applyBindings(viewModel);
关于javascript - Knockout.js 通过 ajax 调用将项目添加到 foreach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49332448/
我创建了一个用户可以添加测试的字段。这一切运行顺利我只希望当用户点击(添加另一个测试)然后上一个(添加另一个测试)删除并且这个显示在新字段中。 所有运行良好的唯一问题是点击(添加另一个字段)之前添加另
String[] option = {"Adlawan", "Angeles", "Arreza", "Benenoso", "Bermas", "Brebant
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在努力将 jQuery 滚动功能添加到 nav-tab (Bootstrap 3)。我希望用户能够选择他们想要的选项卡,并在选项卡内容中有一个可以平滑滚动到 anchor 的链接。这是我的代码,可
我正在尝试在用户登录后再添加 2 个 ui 选项卡。首先,我尝试做一个之后。 $('#slideshow').tabs('remove', '4'); $("#slideshow ul li:last
我有一个包含选择元素的表单,我想通过选择添加和删除其中一些元素。这是html代码(这里也有jsfiddle http://jsfiddle.net/txhajy2w/):
正在写这个: view.backgroundColor = UIColor.white.withAlphaComponent(0.9) 等同于: view.backgroundColor = UICo
好的,如果其中有任何信息,我想将这些列添加到一起。所以说我有 账户 1 2 3 . 有 4 个帐户空间,但只有 3 个帐户。我如何创建 java 脚本来添加它。 最佳答案 Live Example H
我想知道是否有一种有效的预制算法来确定一组数字的和/差是否可以等于不同的数字。示例: 5、8、10、2,使用 + 或 - 等于 9。5 - 8 = -3 + 10 = 7 + 2 = 9 如果有一个预
我似乎有一个卡住的 git repo。它卡在所有基本的添加、提交命令上,git push 返回所有内容为最新的。 从其他帖子我已经完成了 git gc 和 git fsck/ 我认为基本的调试步骤是
我的 Oracle SQL 查询如下- Q1- select hca.account_number, hca.attribute3, SUM(rcl.extended_amou
我正在阅读 http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingG
我正在尝试添加一个“加载更多”按钮并限制下面的结果,这样投资组合页面中就不会同时加载 1000 个内容,如下所示:http://typesetdesign.com/portfolio/ 我对 PHP
我遇到这个问题,我添加了 8 个文本框,它工作正常,但是当我添加更多文本框(如 16 个文本框)时,它不会添加最后一个文本框。有人遇到过这个问题吗?提前致谢。 Live Link: JAVASCRIP
add/remove clone first row default not delete 添加/删除克隆第一行默认不删除&并获取正确的SrNo(例如:添加3行并在看到问题后删除SrNo.2)
我编码this ,但删除按钮不起作用。我在控制台中没有任何错误.. var counter = 0; var dataList = document.getElementById('materi
我有一个类似数组的对象: [1:数组[10]、2:数组[2]、3:数组[2]、4:数组[2]、5:数组[3]、6:数组[1]] 我正在尝试删除前两个元素,执行一些操作,然后将它们再次插入到同一位置。
使用的 Delphi 版本:2007 你好, 我有一个 Tecord 数组 TInfo = Record Name : String; Price : Integer; end; var Info
我使用了基本的 gridster 代码,然后我声明了通过按钮添加和删除小部件的函数它工作正常但是当我将调整大小功能添加到上面的代码中时,它都不起作用(我的意思是调整大小,添加和删除小部件) 我的js代
title 323 323 323 title 323 323 323 title 323 323 323 JS $(document).keydown(function(e){
我是一名优秀的程序员,十分优秀!