Tag: knockout.js

绑定到简单的string数组

如果我想将一个模板绑定到一个普通的旧string数组,我将在$ {??}expression式中放置什么? 我希望这个片段不要太短,以免混淆: <ul data-bind="template: { name: 'authorTemplate', foreach: authors }"> </ul> 作者仅仅是["a", "b", "c"] <script type="text/x-jquery-tmpl" id="authorTemplate"> <li>${what_do_I_put_here???}</li> </script> 我试过: val value this和this.toString() 。 最后两个显示[对象对象],所以我怀疑我在那里很接近。

检测对Knockout视图模型的更改

当然,这是一个非常容易回答的问题,但是有没有一种简单的方法来确定挖空视图模型的任何属性是否已经改变?

KnockoutJs v2.3.0:错误您不能将绑定多次应用于同一个元素

我刚刚升级到2.3.0,现在我得到错误'你不能多次绑定到同一个元素。 我没有进入2.2.1。 我从我的MVC控制器获得了部分视图,并在点击href后将其添加到页面。 第二次点击链接以获得部分视图时发生错误。 我正在多次这样做。 有没有办法清除这一点,并避免新的错误抛出? 这是我的代码: $.get(url + "GetAssignedCompaniesView?layoutId=" + layoutId + "&noCache=" + new Date().getMilliseconds(), function (result) { $("#editAssignedPartial").html($(result)); showEditAssignedArea(true); $(window.document).ready(function () { // error is thrown here ko.applyBindings(self, window.document.getElementById("editAssigned")); $("#layoutId").attr("value", layoutId); updateTypeHiddenElement.attr("value", "companies"); }); }); <div id="editAssignedPartial"> </div> $(document).ready(function () { 'use strict'; var vm = new Vm(); ko.applyBindings(vm, document.getElementById("area1")); });

订阅observable数组只有新的或删除的条目

所以是的,我可以订阅一个可观察数组: vm.myArray = ko.observableArray(); vm.myArray.subscribe(function(newVal){…}); 问题是传递给函数的newVal是整个数组。 无论如何,我只能得到三angular洲的一部分? 说添加或删除的元素?

KnockoutJS中variables$ data的来源和目的是什么?

在KnockoutJS教程中,我偶然发现了下面的代码示例,其中包含一个无法解释的variables$data 。 视图(html): <!– Folders –> <ul class="folders" data-bind="template: { name: 'folderTemplate', foreach: folders }"></ul> <script type="text/html" id="folderTemplate"> <li data-bind="css: { selected: $data == mailViewModel.selectedFolder() }, click: function() { mailViewModel.selectFolder($data) }"> ${$data} </li> </script> 视图模型(JavaScript): var viewModel = { // Data folders: ['Inbox', 'Archive', 'Sent', 'Spam'], selectedFolder: ko.observable('Inbox'), // Behaviours selectFolder: function (folder) { this.selectedFolder(folder); […]

强制计算属性函数运行

给定一个计算的属性 vm.checkedValueCount = ko.computed(function(){ var observables = getCurrentValues(); //an array of ko.observable[] return _.filter(observables, function(v) { return v() }).length; }); 假设getCurrentValues()可以返回代码中其他地方修改的不同的可观察集合(来自比observableArray更复杂的结构)。 我需要checkedValueCount来更新 它的一个依赖关系发生了变化 getCurrentValues()返回一组不同的观察值。 问题是, ko.computed似乎memoize最后返回的值,只有更新时,依赖项更新。 这处理第一个案件,但不是后者。 我正在寻找的方法是强制checkedValueCount重新运行。 一些我可以使用的东西: changeCurrentValues(); vm.checkeValueCount.recalculate(); 最简单的,因为我有 a = ko.computed(function() { return Math.random() }) 我怎么能强制调用a()两次返回不同的值。

为什么knockout.js有一个更好的小项目,backbone.js的声誉大?

我已经使用了几个月的knockout.js,并且觉得每天使用它都很愉快。 不必pipe理dom状态或应用自己的自定义绑定所带来的收益是不可思议的,我不介意没有开箱即用的模型function。 但是,每次我阅读一下knockout.js和其他框架的概念,大家一致认为它是好的,它会减less代码和复杂性,但是它更适合于较小的项目。 这个陈述总是作为一个事实给予的,没有太多的解释,所以我对这个共识似乎是什么感到困惑。 (公平地说,我还没有使用骨干,所以不真正知道他们如何比较) 我用了两个相当大的项目,每个都有十几个模型和十几个视图模型,还没有看到问题。 在一个大型的项目中,我唯一能看到vs Backbone的缺点是,你将会得到一些不可忽视的性能,因为有knockout应用和pipe理所有的绑定。 但是,这是主要关心还是有什么我失踪?

如何使用jsFiddleselect多个框架?

我怎样才能让jsfiddle使用多个库? 我似乎只能得到它使用jQuery或淘汰赛,但不是两个。 然而,当我看着别人的小提琴时,他们似乎没有这个问题。 真的很讨厌不知道为什么它如此diffuclt和互联网上没有任何search任何东西! 谢谢

如何使用Knockout.js将某个项目添加/插入某个位置的ObservableArray

我find的所有挖空的例子似乎都添加了一个新的项目到一个ObservableArray的末端使用类似的东西: viewModel.SomeItems.push(someNewItem); 这当然会把项目放在数组的末尾。 如何添加一个项目的ObservableArray在某个位置? 例如。 就像是: viewModel.SomeItems.push(someNewItem, indexToInsertItAt);

改变select与淘汰赛的绑定事件,我怎么知道它是否是一个真正的变化

我正在构build权限用户界面,我有一个权限列表与每个权限旁边的select列表。 权限由绑定到select列表的可观察数据对象表示: <div data-bind="foreach: permissions"> <div class="permission_row"> <span data-bind="text: name"></span> <select data-bind="value: level, event:{ change: $parent.permissionChanged}"> <option value="0"></option> <option value="1">R</option> <option value="2">RW</option> </select> </div> </div> 现在问题是这样的:当用户界面第一次填充时,更改事件会被触发。 我打电话给我的ajax函数,获取权限列表,然后为每个权限项目引发事件。 这真的不是我想要的行为。 我希望只有在用户真正为select列表中的权限选取新值时才会提出这个问题 ,我该怎么做?