我正在使用KnockoutJS并拥有主视图和视图模型.我想要一个对话框(jQuery UI one)弹出另一个视图,该视图要绑定一个单独的子视图模型.
使用AJAX检索对话框内容的HTML,所以我希望能够ko.applyBindings
在请求完成后调用,并且我想将子视图模型绑定到通过对话框div中的ajax加载的HTML部分.
这实际上是可行的还是我需要在页面最初加载然后调用ko.applyBindings
一次时加载我的所有视图和查看模型?
学习Ember.js/Backbone.js一直在我的待办事项清单上.现在Meteor已经出局,我只是想知道是否有经验的Meteor,Ember.js和Backbone.js可以总结这三个JavaScript框架的主要差异和优缺点,对于没有任何经验的人来说.
具体来说,我想知道每个框架更适合哪些任务,以及其他框架不适合的原因.
编辑:现在我在Meteor上看了一点,它看起来更类似于Knockout.js而不是Backbone.js.所以任何与Knockout.js的比较也是受欢迎的.
我认为我的应用程序现在变得非常大,太大而无法使用单个ViewModel处理每个View.
所以我想知道创建多个ViewModel并将它们全部加载到一个View中会有多困难.需要注意的是,我还需要能够将X ViewModel数据传递到Y ViewModel数据中,以便各个ViewModel需要能够相互通信或至少相互了解.
例如,我有一个<select>
下拉列表,选择下拉列表具有一个选定的状态,允许我在<select>
另一个ViewModel 中将所选项目的ID传递给另一个Ajax调用....
在单个视图中处理众多ViewModel的任何要点赞赏:)
我一直在调试KnockoutJS模板中的问题.
假设我想绑定到名为" items
" 的属性,但在模板中我输入错字并绑定到(不存在的)属性" item
".
使用Chrome调试器只会告诉我:
"item" is not defined.
是否有工具,技术或编码样式可以帮助我获得有关绑定问题的更多信息?
我收到此错误:
JSON请求太大而无法反序列化.
这是发生这种情况的场景.我有一类国家,其中包含该国的航运港口清单
public class Country
{
public int Id { get; set; }
public string Name { get; set; }
public List<Port> Ports { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我在客户端使用KnockoutJS进行级联下拉.所以我们有两个下拉列表,其中第一个是国家,第二个是该国家的港口.
到目前为止一切正常,这是我的客户端脚本:
var k1 = k1 || {};
$(document).ready(function () {
k1.MarketInfoItem = function (removeable) {
var self = this;
self.CountryOfLoadingId = ko.observable();
self.PortOfLoadingId = ko.observable();
self.CountryOfDestinationId = ko.observable();
self.PortOfDestinationId = ko.observable();
};
k1.viewModel = function () {
var marketInfoItems = ko.observableArray([]),
countries = ko.observableArray([]),
saveMarketInfo = function () {
var …
Run Code Online (Sandbox Code Playgroud) 在淘汰赛中,我看到View Models声明为:
var viewModel = {
firstname: ko.observable("Bob")
};
ko.applyBindings(viewModel );
Run Code Online (Sandbox Code Playgroud)
要么:
var viewModel = function() {
this.firstname= ko.observable("Bob");
};
ko.applyBindings(new viewModel ());
Run Code Online (Sandbox Code Playgroud)
如果有的话,两者之间有什么区别?
我确实在knockoutjs google小组上找到了这个讨论,但它并没有给我一个满意的答案.
如果我想用一些数据初始化模型,我可以看到一个原因,例如:
var viewModel = function(person) {
this.firstname= ko.observable(person.firstname);
};
var person = ... ;
ko.applyBindings(new viewModel(person));
Run Code Online (Sandbox Code Playgroud)
但如果我不这样做,我选择哪种风格呢?
这个淘汰js的例子在你编辑一个字段并按下TAB时就可以工作,视图模型数据以及字段下面的文本都会被更新.
如何更改此代码以便每次按键更新viewmodel数据?
<!doctype html>
<html>
<title>knockout js</title>
<head>
<script type="text/javascript" src="js/knockout-1.1.1.debug.js"></script>
<script type="text/javascript">
window.onload= function() {
var viewModel = {
firstName : ko.observable("Jim"),
lastName : ko.observable("Smith")
};
viewModel.fullName = ko.dependentObservable(function () {
return viewModel.firstName() + " " + viewModel.lastName();
});
ko.applyBindings(viewModel);
}
</script>
</head>
<body>
<p>First name: <input data-bind="value: firstName" /></p>
<p>Last name: <input data-bind="value: lastName" /></p>
<h2>Hello, <span data-bind="text: fullName"> </span>!</h2>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我想在我的ViewModel上使用一个属性来切换要显示的图标,而不创建反向的单独计算属性.这可能吗?
<tbody data-bind="foreach: periods">
<tr>
<td>
<i class="icon-search" data-bind="visible: !charted, click: $parent.pie_it"></i>
<i class="icon-remove" data-bind="visible: charted, click: $parent.pie_it"></i>
</td>
</tr>
</tbody>
Run Code Online (Sandbox Code Playgroud)
我的ViewModel有一个属性句点,它是一个月份数组,如下所示:
var month = function() {
this.charted = ko.observable(false);
};
Run Code Online (Sandbox Code Playgroud) 注意:这主要用于调试和理解KnockoutJS.
有没有办法明确请求Knockout从(已绑定)视图模型刷新视图?我正在寻找类似的东西:
ko.refreshView();
Run Code Online (Sandbox Code Playgroud)
我知道这不是Knockout的预期用途,但我仍然想知道是否有这样的方法用于调试和学习目的.
是否有任何使用TypeScript和KnockoutJS的示例?我只是好奇他们将如何一起工作?
这就是我所拥有的,似乎有效
declare var ko: any;
declare var $: any;
class ViewModel {
x = ko.observable(10);
y = ko.observable(10);
}
$(() => {
ko.applyBindings(new ViewModel());
});
Run Code Online (Sandbox Code Playgroud)
这会生成以下Javascript:
var ViewModel = (function () {
function ViewModel() {
this.x = ko.observable(10);
this.y = ko.observable(10);
}
return ViewModel;
})();
$(function () {
ko.applyBindings(new ViewModel());
});
Run Code Online (Sandbox Code Playgroud) knockout.js ×10
javascript ×3
ajax ×1
asp.net-mvc ×1
backbone.js ×1
data-binding ×1
debugging ×1
ember.js ×1
html5 ×1
meteor ×1
mvvm ×1
typescript ×1