【问题标题】:Need some guide line to achieve a task using knockout js需要一些指南来使用淘汰赛 js 完成任务
【发布时间】:2015-08-12 01:45:58
【问题描述】:

我是淘汰赛 js 的新手,并且很抱歉寻求帮助,因为我喜欢的输出我对淘汰赛 js 没有足够的知识。

假设我有三个下拉菜单和一个按钮,假设国家下拉菜单、州下拉菜单和城市下拉菜单和一个按钮。所有下拉菜单都填充了数据。现在我希望默认情况下该按钮将被禁用,但是当用户从任何下拉列表中选择任何数据时,该按钮将被启用。所以逻辑和代码并没有浮现在我的脑海。我需要指南来开发具有淘汰赛绑定的此类程序。

所以请有人分享知识。

一个人告诉我用这种方式完成这项任务。

您有 3 倍的可观察数据 - 州、县和市。它们与dropdowns 绑定。 您将拥有另一个名为“buttonEnabled”的可观察对象,其形式为 var buttonEnabled = ko.observable(false). 使用已启用的绑定将此绑定到您的按钮。

创建一个计算的,纯粹是为了它的副作用。代码将是

ko.computed( function() {

//just so this computed subscribes to those observables
state();
county();
city();

//Prevent this from running when the computed is initialising.
//See http://knockoutjs.com/documentation/computed-reference.html
if (!ko.computedContext.isInitial()) {
  buttonEnabled(true);
}
});

还有其他方法,比如直接在 observables 上使用.subscribe()

但仍然不明白如何做到这一点。任何帮助,将不胜感激。谢谢

编辑

我只是添加一个文本框和下拉菜单并尝试执行相同的操作,例如如果有人填充文本框然后按钮将被启用,如果有人从文本框中删除文本则按钮将被禁用。

当文本框为空并且放置一些文本时,按钮将被启用,但是当从文本框中删除文本时,按钮假设被禁用,这不会发生。我想代码中缺少一些小东西。所以请告诉我要添加什么。这是我的 jsfiddle 链接http://jsfiddle.net/tridip/r95kc6u5/1/

<input data-bind="value: UserName, valueUpdate: 'afterkeydown'" />
<br /><br />
<select data-bind="options: country, optionsCaption:'--Select Country--', value: selected_country"></select>
<br /><br />
<select data-bind="options: state, optionsCaption:'--Select State--', value: selected_state"></select>
<br /><br />
<select data-bind="options: city, optionsCaption:'--Select City--', value: selected_city"></select>
<br /><br />
<button data-bind="enable: buttonEnabled">Submit</button>

function ViewModel() {
    var self = this;
    self.UserName = ko.observable(null);
    self.state = ko.observableArray(['State 1', 'State 2', 'State 3']);
    self.country = ko.observableArray(['Country 1', 'Country 2', 'Country 3']);
    self.city = ko.observableArray(['City 1', 'City 2', 'City 3']);

    self.selected_state = ko.observable(null);
    self.selected_country = ko.observable(null);
    self.selected_city = ko.observable(null);

    self.buttonEnabled = ko.computed(function () {
        var state = false;
        if (self.selected_state() != null || self.selected_country() != null || self.selected_city() != null || self.UserName()!=null) {
            state = true;
        }
        return state;
    });
}

var vm = new ViewModel();
ko.applyBindings(vm);

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    下面的代码可让您从 3 个下拉列表之一中选择一个值,然后启用该按钮。

    HTML

    <select data-bind="options: state, optionsCaption:'States', value: selected_state"></select>
    <br />
    <select data-bind="options: country, optionsCaption:'Countries', value: selected_country"></select>
    <br />
    <select data-bind="options: city, optionsCaption:'Cities', value: selected_city"></select>
    <br />
    <input type="text" data-bind="value: text_value, valueUpdate: 'afterkeydown'" /> // newly added
    <br />
    <button data-bind="enable: buttonEnabled">Submit</button>
    

    KnockoutJS

    function ViewModel() {
        var self = this;
    
        self.state = ko.observableArray(['State 1', 'State 2', 'State 3']);
        self.country = ko.observableArray(['Country 1', 'Country 2', 'Country 3']);
        self.city = ko.observableArray(['City 1', 'City 2', 'City 3']);
    
        self.selected_state = ko.observable(null);
        self.selected_country = ko.observable(null);
        self.selected_city = ko.observable(null);
        self.text_value = ko.observable(''); // newly added
    
        self.buttonEnabled = ko.computed(function () {
            var state = false;
            // new value added to check (self.text_value)
            if (self.selected_state() != null || self.selected_country() != null || self.selected_city() != null || self.text_value() != '') {
                state = true;
            }
            return state;
        });
    }
    
    var vm = new ViewModel();
    ko.applyBindings(vm);
    

    谢谢

    【讨论】:

    • 假设我喜欢添加一个文本框和下拉菜单,还需要一个帮助。如果用户填写了文本框,那么如果没有从任何下拉列表中选择数据,则按钮也将被启用。所以告诉我要在代码中添加什么?
    • 这是新的 jsfiddle jsfiddle.net/tridip/r95kc6u5/2 完美运行。非常感谢:)
    • 我只是尝试使用不同的代码启用禁用。这里是 jsfiddle jsfiddle.net/tridip/ymha7g3z,你可以看到我没有使用计算函数来启用禁用按钮并且它正在工作,但请注意一个问题,即当任何下拉值更改时,其他下拉值也会更改,如级联下拉。请你看看我的新 jsfiddle 链接并告诉我为什么会这样?谢谢
    猜你喜欢
    • 2015-02-28
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 2013-07-14
    • 2013-11-25
    • 1970-01-01
    相关资源
    最近更新 更多