Tag: knockout.js

将KnockoutJS绑定到带有计算机的单选按钮

我有一系列答案的问题。 每个答案都有一个名为isRight的布尔属性,它表示答案是否正确。 我正在尝试为每个答案渲染一个单选按钮,并检查答案是否正确。 如果用户单击其他按钮,则该答案将变为正确。 我知道KO将checked属性绑定到一个值,并且只有当无线电的值与绑定值匹配时才会检查每个单选按钮; 你不能直接绑定到isRight。 我在一个问题本身上放了一个computedObservable,它应该做到这一切。 它有效。 问题是,我想订阅单选按钮的更改事件,以查看何时选择了新的答案(并发送ajax请求)。 我遇到的问题是更改处理程序中没有更新ko绑定。 似乎在处理程序中延迟会给我我想要的东西,但我更喜欢更直接的解决方案。 似乎点击事件完美无缺,但每次单击一个单选按钮时都会触发,即使它已经被检查过。 有没有办法确保在更改事件中更新绑定? 目前的代码是ko 2.0,我也试过2.1。 完全小提琴 完整来源: function Question() { this.name = “My Question”; var i = 0; this.answers = ko.observableArray([ new Answer(++i, “Answer 1”, false), new Answer(++i, “Answer 2”, true), new Answer(++i, “Answer 3”, false)]); this.correctAnswer = ko.computed({ read: function () { for (var […]

KnockoutJs v2.3.0:“无法多次将绑定应用于同一个元素”

问题: 在现有的应用程序中,我添加了一个新function,该function使用knockout来显示网格和一些其他信息。 我在开始时加载一些数据并准备使用ajax加载其他数据的订阅,在Razor视图中创建viewmodel以注入服务器端变量,然后绑定它(如果我传递html节点没关系,我有同样的问题)。 在页面加载时,控制台中出现“无法多次对同一元素应用绑定”错误,并且使用if , with或template绑定的所有html元素都为空。 在整个项目中唯一出现的“applyBindings”在我看来,在淘汰源中。 调试显示它被调用两次,两次都来自$(document).ready 当我从代码中删除应用绑定,并稍后使用控制台手动调用它时,它可以工作。

如何在IE中动态生成的挖空模板中将自动焦点转移到输入元素

我问了这个问题并得到了一个很好的答案,所以现在我有一个动态模板在淘汰赛中,效果很好,除了在IE中我无法获得动态模板在弹出窗口渲染时将焦点设置在其中一个输入字段中。 将自动对焦添加到tem,平板脚本文本在chrome中工作,但我也希望它在IE中工作,但似乎无法实现。 modal = { header: ko.observable(“This is a modal”), //this is now just the name of the template body: ko.observable(‘bodyTemplateA’), // … }; 然后在你的绑定中,做 然后当然分别定义所有需要的模板: Name: Type: 我尝试使用knockout hasfocus绑定: Name: Type: 但这似乎不起作用。 我还尝试在显示表单的函数中添加一些jquery: self.showStepModal = function () { self.newStepModal.show(true); //tried both of the following lines but neither seems to work… $(‘[autofocus]:not(:focus)’).eq(0).focus(); $(‘#workflowname’).focus(); }; 在渲染模板后,如何将焦点设置为使用自动对焦标记的输入?

bootstrapValidator:如何动态地向现有输入字段添加和删除validation器?

我有一个与knockout.js绑定并由bootstrapValidatorvalidation的动态表单。 根据另一个控件的状态,有一个输入字段需要“必需 – validation”。 输入字段: knockout-viewmodel的相关javascript部分: self.SelectAbsenceType = function (absenceType) { self.SelectedID(absenceType.ID); if (self.SelectedAbsenceType().ReasonRequired) { $(‘#formCreate’).bootstrapValidator(‘addField’, ‘inputReason’, { validators: { notEmpty: { message: ‘Please enter a reason’ } } }); } else { $(‘#formCreate’).bootstrapValidator(‘removeField’, ‘inputReason’); } } 我面临的问题是,对bootstrapValidator实例的removeField的调用似乎并没有完全删除所有注册信息,因为bootstrapValidator类的updateStatus方法中存在一个javascriptexception,实际上根本不应该调用它,因为我有删除之前的字段: var that = this, type = fields.attr(‘type’), group = this.options.fields[field].group || this.options.group, total = (‘radio’ === type […]

将最后一个选项卡添加到可排序的选项卡列表中

我正在使用twitter bootstrap,knockout,knockout-sortable和JQuery UI(也是haml,但它对这个问题无关紧要)。 我显示如下的选项卡列表。 它添加了一个带有按钮的最终选项卡。 %ul.nav.nav-tabs /ko foreach: pages %li %span{ “data-bind” => “text: name()” } / /ko %li %button.btn %i.icon-plus 我正在尝试使标签排序(通过拖动),但我遇到按钮问题: %ul.nav.nav-tabs{ “data-bind” => “sortable: pages” } %li %span{ “data-bind” => “text: name()” } /%li / %button.btn / %i.icon-plus 我不能使用/ko sortable: pages因为它不起作用( The binding ‘sortable’ cannot be used with virtual elements )。 如何实现具有可排序性的相同效果(最后一个标签是按钮)? 但是无法移动最终的选项卡/按钮。 […]

以编程方式将Knockout绑定应用于文本块中的特定标记

我有一个html标记块,我想使用Knockout JS将数据绑定到div。 这对于敲除html绑定来说非常简单。 我想要做的是根据他们的类有条件地绑定该html标记中的子元素。 这些元素可以出现在html标记中的任何位置,因为它们是内联元素(如span , a标签等)。 这样做的目的是将事件数据绑定到此文本块中的特定单词或短语,以便我可以调用一个函数(在这种情况下,是一个带有目标单词或短语定义的模态)。 有谁知道如何做到这一点? 从我所看到的,我有两个主要的途径可供探索: 使用jQuery按类抓取元素,然后以某种方式数据绑定到事后。 我不知道这是否会因各种原因而起作用 – 没有准备好DOM,无法在该方法中进行数据绑定等。 使用knockout的模板绑定 ,并添加一个afterRender模板回调,该回调解析元素的文本块并相应地对它们进行数据绑定。 以上两者的组合。 (是的,我知道,这是三个途径。) 以前有人做过这样的事吗? 如果可能的话,我想得到你的建议和反馈。 谢谢!

如何在敲除绑定完成时获取事件

我有jquery selectmenu插件和knockout绑定的问题。 简而言之,我需要在敲除绑定完成后调用selectmenu。 我怎么知道某些html元素的绑定已完成?

将图像src绑定为Knockout中的表达式

如果你觉得这个问题太愚蠢了,请耐心等待。 我是淘汰赛并尝试学习它的初学者。 我想将图像源绑定到表达式。 表达式负责生成路径,并且该路径必须作为源应用于img。 @**@ 我正在使用以下数据绑定ViewModel: function PatientsModel(data) { var self = this; self.Patients = ko.observableArray([]); self.Patients(data.Patients); self.ImageSource = function (model) { if (model.myPatient == true) { return PyxisLinkJS.RootURL + ‘/Content/Images/MPL/MyPatientGray.png’; } else if (model.localPatient == true) { return PyxisLinkJS.RootURL + ‘/Content/Images/MPL/PersonAdd.png’; } else { return PyxisLinkJS.RootURL + ‘/Content/Images/MPL/MyPatientGray.png’; } } } 这就是发生的事情:它试图将ImageSource的函数体设置为Image的src。 我想在哪里触发ImageSource方法并将返回值设置为Image的Src。 此致,Sumeet

用敲击映射插头限制

我在使用IE8的淘汰映射插件时遇到了问题。 我们的情况是我们发送可以显示给客户的所有可能记录。 然后我们在客户端处理响应系统的所有分页和过滤。 目前,我们正在发送一个包含250条记录的列表,以便通过jQuery ajax在基于jQuery模板的网格中显示。 当我们调用ko.mapping.fromJS(而不是fromJSON函数)来映射对象时,我们从IE8得到一个“脚本耗时太长”的消息。 在FF和Chrome中不会发生,因为它们的java脚本执行得更快。 有没有直接的方法来限制映射? 这是一个长期问题,因为我们可能会有近1000条记录要发送给客户。

在外部JavaScript文件中使用KnockoutJS ViewModel

如何在外部JS文件中创建KO.JS ViewModel然后在html文件中使用它? 这似乎是一件简单的事情,但我无法让它工作,也无法找到有关如何做到这一点的任何明确信息。 如果我忽略了,我道歉,如果有人能指出我的答案,我会删除它。 外部vm: var myApp = (function (myApp) { myApp.ReportViewModel = function() { var self = this; self.test = ko.observable(); } }(myApp || {})); 单独的HTML文件: My Page First Name Hello, ! ($function(){ var reportVM = new myApp.ReportViewModel(); ko.applyBindings(reportVM); }); 编辑我做了建议的更改。 这是我的项目现在看起来像但它仍然无法正常工作。 此外,knockout.js代码根本没有运行。