我正在使用KnockoutJS版本2.0.0 如果我遍历一个对象的所有属性,我怎么testing每个属性是否是一个ko.observable ? 以下是我迄今为止所尝试的: var vm = { prop: ko.observable(''), arr: ko.observableArray([]), func: ko.computed(function(){ return this.prop + " computed"; }, vm) }; for (var key in vm) { console.log(key, vm[key].constructor === ko.observable, vm[key] instanceof ko.observable); } 但迄今为止,一切都是错误的。
我需要在一个元素上有多个数据绑定。 例如,我想要一个href以及a标签上的html数据绑定。 我试过这个, <a data-bind="html: name" data-bind="attr: { href: url }" data-bind="attr: { 'data-prop': xyz }"> </a> 但是这不起作用。 看来淘汰赛只支持绑定一个 data-bind属性? 如何在一个元素上绑定href ,内部html和自定义的“ data-prop ”属性?
我想build立一个移动应用程序,从没有更多,但HTML / CSS和JavaScript酿造。 虽然我对如何使用JavaScript构buildWeb应用程序有一个很好的理解,但我想我可能会看看像jquery-mobile这样的框架。 起初,我认为jquery-mobile不过是一个针对移动浏览器的小部件框架。 非常类似于jquery-ui,但是对于移动世界。 但是我注意到,jquery-mobile不止于此。 它带有一堆架构,让我们用声明性的html语法来创build应用程序。 所以对于最容易理解的应用程序,你不需要自己写一行JavaScript(这很酷,因为我们都喜欢less工作,不是吗?) 为了支持使用声明性html语法创build应用程序的方法,我认为将jquery-mobile与knockoutjs结合是一个很好的方法。 Knockoutjs是一个客户端MVVM框架,旨在将WPF / Silverlight中已知的MVVM超级权力带入JavaScript世界。 对我来说MVVM是一个新的世界。 虽然我已经阅读了很多,但我以前从来没有真正使用过它。 所以这篇文章是关于如何构build一个应用程序使用jquery-mobile和knockoutjs在一起。 我的想法是写下我看了几个小时后想出来的方法,并有一些jquery-mobile / knockout yoda来评论它,告诉我为什么它会糟糕,为什么我不应该在第一个编程地方;-) html jquery-mobile很好的提供了页面的基本结构模型。 虽然我很清楚,我可以让我的页面通过ajax加载后,我只是决定把它们全部保存在一个index.html文件中。 在这个基本情况下,我们正在讨论两个页面,所以不应该太难以保持最重要的东西。 <!DOCTYPE html> <html> <head> <title>Page Title</title> <link rel="stylesheet" href="libs/jquery-mobile/jquery.mobile-1.0a4.1.css" /> <link rel="stylesheet" href="app/base/css/base.css" /> <script src="libs/jquery/jquery-1.5.0.min.js"></script> <script src="libs/knockout/knockout-1.2.0.js"></script> <script src="libs/knockout/knockout-bindings-jqm.js" type="text/javascript"></script> <script src="libs/rx/rx.js" type="text/javascript"></script> <script src="app/App.js"></script> <script src="app/App.ViewModels.HomeScreenViewModel.js"></script> <script src="app/App.MockedStatisticsService.js"></script> <script […]
我有这个淘汰赛的代码: function Task(data) { this.title = ko.observable(data.title); this.isDone = ko.observable(data.isDone); } function TaskListViewModel() { // Data var self = this; self.tasks = ko.observableArray([]); self.newTaskText = ko.observable(); self.incompleteTasks = ko.computed(function() { return ko.utils.arrayFilter(self.tasks(), function(task) { return !task.isDone() }); }); // Operations self.addTask = function() { self.tasks.push(new Task({ title: this.newTaskText() })); self.newTaskText(""); }; self.removeTask = function(task) { […]
我经常发现自己在基于KO的HTML模板中使用这个成语: <!– ko if: isEdit –> <td><input type="text" name="email" data-bind="value: email" /></td> <!– /ko –> <!– ko ifnot: isEdit –> <td data-bind="text: email"></td> <!– /ko –> 是否有一个更好的/更清洁的方式来做关系条件,还是有一个更好的方法比只使用传统的if-else结构? 另外,我只想指出某些版本的Internet Explorer(IE 8/9)不能正确parsing上述示例。 请参阅此SO问题的更多信息。 简要总结一下,不要在表标签内部使用注释(虚拟绑定)来支持IE。 使用tbody代替: <tbody data-bind="if: display"><tr><td>hello</td></tr></tbody>
我正在将function构build到用户可以多次执行的网页上。 通过用户的操作,使用ko.applyBindings()创build对象/模型并将其应用于HTML。 数据绑定的HTML是通过jQuery模板创build的。 到现在为止还挺好。 当我通过创build第二个对象/模型重复这一步,并调用ko.applyBindings()我遇到两个问题: 标记显示了以前的对象/模型以及新的对象/模型。 尽pipe仍然在标记中呈现,但是与对象/模型中的其中一个属性有关的javascript错误。 为了解决这个问题,在第一次传递之后,我调用jQuery的.empty()来移除包含所有数据绑定属性的模板化HTML,以使其不再位于DOM中。 当用户启动第二遍的过程时,数据绑定的HTML被重新添加到DOM。 但正如我所说,当HTML被重新添加到DOM,并重新绑定到新的对象/模型,它仍然包括来自第一个对象/模型的数据,我仍然得到JS错误不会发生在第一次通过。 结论似乎是Knockout坚持这些绑定的属性,即使标记从DOM中删除。 所以我正在寻找的是一种从Knockout中去除这些绑定属性的方法; 告诉淘汰赛,不再有可观察的模型。 有没有办法做到这一点? 编辑 基本过程是用户上传文件; 服务器然后响应一个JSON对象,数据绑定的HTML被添加到DOM,然后JSON对象模型绑定到这个HTML使用 mn.AccountCreationModel = new AccountViewModel(jsonData.Account); ko.applyBindings(mn.AccountCreationModel); 一旦用户在模型上做了一些select,同一个对象被发回到服务器,数据绑定的HTML被从DOM中删除,然后我有以下的JS mn.AccountCreationModel = null; 当用户希望再次这样做时,重复所有这些步骤。 恐怕代码太“参与”做一个jsFiddle演示。
我想push一个新的项目上一个observableArray ,但只有当项目不存在。 KnockoutJS中是否有任何“查找”function或推荐模式? 我已经注意到, observableArray上的remove函数可以接收一个传入条件的函数。 我几乎想要相同的function,但是只有当传入的条件是或者不是真时才会推送它。
我用KnockoutJS写了一些自定义绑定。 我仍然不确定何时使用ko.util.unwrapObservable(item)查看代码,该调用基本上检查是否item是可观察的。 如果是,则返回值(),如果不是,则返回值。 看看有关创build自定义绑定的Knockout部分,它们具有以下语法: var value = valueAccessor(), allBindings = allBindingsAccessor(); var valueUnwrapped = ko.utils.unwrapObservable(value); 在这种情况下,它们通过()调用observable,但也调用ko.utils.unwrapObservable 。 我只是想弄清楚什么时候使用一种模式,或者如果我应该总是遵循上面的模式并使用它们。
我有一个要求,我必须使用引导自动完成下拉菜单,但用户可以在该下拉列表中的自由格式文本,如果他们希望。 在考虑TypeAhead之前,我可以使用Bootstrap TypeAhead文本框,但是我需要下拉菜单,因为我们希望给一些默认值作为headstart选项,以防用户不知道要search的内容。 我正在使用MVC的DropDownListFor这为我们创build一个select控制。 我发现这篇文章是为我做的。 https://github.com/danielfarrell/bootstrap-combobox/pull/20 我所要做的只是从select控制中取下名字,控制让我进入自由forms的文本。 迄今为止都很好。 现在,我和Knockoutjs一起使用它。 我将我的选项和选定的值绑定到select控件,然后在我的模板的行渲染上,我调用了(select器).combobox(),这使得select控件成为引导combobox,并添加了input控件,并隐藏了场景中的select控件背后。 现在的问题是,当我尝试让他的值发布到服务器,因为我把它放在input框中的值不是我给select控件的选项的有效选项,默认情况下总是将其设置为第一个选项。 这是因为我设置了select控件上的选定值的绑定,而不是由bootstrap-combobox.js创build的input框。 我的问题是如何获得input框数据绑定到select控件绑定到相同的属性。 任何其他选项? 让我知道如果你需要更多的澄清或有问题。 请build议。 谢谢。
赏金 已经有一段时间了,我还有一些未解决的问题。 我希望通过增加一个赏金,也许这些问题将得到答案。 你如何使用knockout.js的HTML助手 为什么需要准备文档才能使其工作(请参阅第一次编辑以获取更多信息) 我如何做这样的事情,如果我使用我的视图模型的挖空映射? 由于我没有一个function,由于映射。 function AppViewModel() { // … leave firstName, lastName, and fullName unchanged here … this.capitalizeLastName = function() { var currentVal = this.lastName(); // Read the current value this.lastName(currentVal.toUpperCase()); // Write back a modified value }; 我想要使用插件的实例,我希望能够回滚observables,就好像用户取消请求,我希望能够回到最后一个值。 从我的研究来看,这似乎是通过编辑插件的人来实现的 我如何使用类似的东西,如果我使用映射? 我真的不想去一个方法,我在我看来,手动映射是我映射每个MVC viewMode字段为KO模型字段,因为我想尽可能小的内嵌JavaScript,似乎是双重工作,这就是为什么我喜欢那个映射。 我担心为了使这项工作变得简单(通过使用制图),我将失去很多权力,但另一方面,我担心手工制图只是大量的工作,并会使我的观点包含太多的信息,可能会在将来变得更难以维护(比如,如果我在MVC模型中删除一个属性,我也必须在KO视图模型中移动它) 原始post 我使用的是asp.net mvc 3,我正在寻找淘汰赛,因为它看起来很酷,但我很难弄清楚它如何与asp.net mvc尤其是视图模型一起工作。 对于我现在我做这样的事情 public class […]