淘汰foreach输入值用户更新值

时间:2014-06-03 12:28:29

标签: php jquery ajax json knockout.js

我的数据绑定列表工作正常。在列表中,我有第一列订单级别。所有数据都来自基于Ajax的服务器端。

HTML CODE

 <div class='general_content' id="designations_items">

        <div class="listing-grid">
            <div class="listing_wrapper">
                <!--Listing Columns-->
                <div class="column heading option_cols">
                    Order Level
                </div>
                <div class="column heading desig_cols">
                    Designation Name
                </div>
                <div class="column heading desig_cols">
                    Job Description
                </div>
                <div class="column heading option_cols">
                    Options
                </div>
                <!--Listing Data-->
            </div>
            <form name="desig_order_level" action="<?php echo $url?>manage/designation_order_level/" id="desig_order_level">
            <div class="listing_wrapper" data-bind="foreach: Designations">
                <div class="column data_display option_cols">
                    <input name="orders[]" data-bind="value: Desig_Order" class="fancyInput_smaller">
                </div>
                <div class="column data_display desig_cols" data-bind="text: Desig_Name"></div>
                <div class="column data_display desig_cols" data-bind="text: Desig_Desc"></div>
                <div class="column data_display option_cols">
                    Remove
                </div>
            </div>
            </form>
        </div>

    </div>



这是我的JS代码

function GetDesignations(handleData) {

    $.ajax({
        url: 'get_designations.php',
        type: "post",
        data: '',
        dataType: 'json',
        success: function(data){
            handleData(data);
        },
        error:function(data){
            alert('Failed');
        }
    });
}

$(function () {

  var Designation_ViewModel = function() {
    var self = this;
    self.Designations = ko.observableArray();

    self.update = function() {

        GetDesignations(function(output){
            self.Designations.removeAll();
            $.each(output, function (i) {
                self.Designations.push(new deisgnation_data_binding(output[i]));
            });
        });
    };
    self.addnewItem = function () {
        var newitem = JSON.parse('{"Name":"'+$("#Name").val()+'", "Desig_desc":"'+$("#Desig_desc").val()+'"}');
        self.Designations.push(
            new deisgnation_data_binding(newitem)
        );
    };
    self.removeToDoItem = function(item) {
        self.Designations.remove(item);
    };

  };

var Designation_ViewModel = new Designation_ViewModel();
var y = window.setInterval(Designation_ViewModel.update,1000);
ko.applyBindings(Designation_ViewModel, document.getElementById("designations_items"));

});
var deisgnation_data_binding = function (data) {
    return {
        Desig_Order: ko.observable(data.Desig_Order),
        Desig_Name: ko.observable(data.Desig_Name),
        Desig_Desc: ko.observable(data.Desig_Desc)
    };
};



几秒钟后,列表将自动更新为新记录...在这种情况下,订单级别也为每条记录获取新的数据库条目。

问题是在用户端我无法在订单级输入框中输入新值来更新,当我选择文本框输入新值时,所有列表都会因为无法让用户更新订单级别而更新。

1 个答案:

答案 0 :(得分:2)

因为我看到您的记录因

而每1秒更新
var y = window.setInterval(Designation_ViewModel.update,1000);  

我认为你应该在这里使用setTimeout代替setIntervalsetTimeout只会执行一次更新功能

window.setTimeout(Designation_ViewModel.update,1000);