2015-07-20 54 views
4

我有下面的HTML和JS,我正在使用MVC。 下面是這種情況如何在日期類型字段中設置值

「過濾器」對象參數中,我無法從KO 「optionsAfterRender」功能指定日期字段的HTML被傳遞。

HTML(Razor視圖):

var Filter =(Project.Models.Entity) ViewData["Filter"]; 

@if (Filter != null) 
       { 
        <div id="sdate"> 
         <label>From Senior Date</label> 
         <input id="sdateVal" type="date" data-bind="value:SeniorDate,optionsAfterRender:function(){setOptionSrDate(@Filter.DateSenior.Value.ToString("yyyy-MM-dd"));}"> 
        </div> 

        <div id="jdate"> 
         <label>To Junior Date</label> 
         <input id="jdateVal" type="date" data-bind="value:JuniorDate,optionsAfterRender:function(){setOptionJrDate(@Filter.DateJunior.Value.ToString("yyyy-MM-dd"));}"> 
        </div> 
       } 

JS(淘汰賽):

self.setOptionSrDate = function (x) {//Sr Date 
     $("#sdateVal").val(x);//this does not assign the value 
     self.SeniorDate(x);//this does not assign the value 
    }; 
+0

我猜它是否與數據綁定有關。當使用相同的選項綁定下拉列表時,我能夠實現這一點,但沒有與文本或日期,因爲有'數據綁定:值' – sss111

回答

0

的問題可能是日期的格式。嘗試這個。

var now = new Date(); 

var day = ("0" + now.getDate()).slice(-2); 
var month = ("0" + (now.getMonth() + 1)).slice(-2); 

var today = now.getFullYear()+"-"+(month)+"-"+(day) ; 

$('#datePicker').val(today); 
+0

這樣做不工作。 – sss111

1

看起來好像要用從HTML元素中獲取的值初始化您的observable。

理想情況下,你希望能夠做到這一點:

<input type="date" value="(@Filter.DateSenior.Value.ToString("yyyy-MM-dd"))" data-bind="value:SeniorDate"> 

但是,這是行不通的,因爲我相信你已經盡力了,因爲value的默認行爲約束力不更新綁定在綁定被初始化時可用dom元素處可觀察到。

但是有一個解決方案,您可以創建,做一切現有value結合不還你想要的行爲,這是初始化觀察到與DOM元素的自定義綁定。

使用此綁定:

ko.bindingHandlers.value2 = { 
    init: function(element, valueAccessor, allBindings) { 
    var observable = valueAccessor(), 
     value = element.value; 
    observable(value); 
    ko.bindingHandlers.value.init.apply(this, arguments); 
    }, 
    update: function(element, valueAccessor, allBindings) { 
    ko.bindingHandlers.value.update.apply(this, arguments); 
    } 
}; 

這將使你做到這一點:

<input type="date" value="(@Filter.DateSenior.Value.ToString("yyyy-MM-dd"))" data-bind="value2:SeniorDate"> 

看到下面的工作片斷:

ko.bindingHandlers.value2 = { 
 
    init: function(element, valueAccessor, allBindings) { 
 
    var observable = valueAccessor(), 
 
     value = element.value; 
 
    observable(value); 
 
    ko.bindingHandlers.value.init.apply(this, arguments); 
 
    }, 
 
    update: function(element, valueAccessor, allBindings) { 
 
    ko.bindingHandlers.value.update.apply(this, arguments); 
 
    } 
 
}; 
 

 
var vm = { 
 
    seniorDate: ko.observable() 
 
}; 
 

 
ko.applyBindings(vm);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 

 
<div> 
 
    <input type="date" value="2015-07-20" data-bind="value2: seniorDate" /> 
 
</div> 
 

 
<div> 
 
    <p data-bind="text: seniorDate"></p> 
 
</div>

RP Niemeyer已回答類似問題here

相關問題