2013-01-15 69 views
0

我有一個頁面,我想知道何時對任何字段進行了任何更改,然後禁用並啓用保存按鈕。ASP.NET MVC4 ViewModel使用knockout.js更改跟蹤

我使用下面的代碼,它不工作任何人都知道我失蹤?

@using CirrusAdmin.Models 
@model MedicineModel 
@{ 
    ViewBag.Title = "Update Medicine"; 
} 

<script src="@Url.Content("~/Scripts/knockout-2.1.0.js")" type="text/javascript"></script> 

<script type="text/javascript"> 
    var initialData = @Html.Raw(Json.Encode(Model)); 

    var viewModel = { 
       item : ko.observable(initialData), 
       isDirty : ko.DirtyFlag(item) 
    }; 

    ko.applyBindings(viewModel); 
</script> 


<hgroup class="title"> 
    <h1>@ViewBag.Title.</h1>  
</hgroup> 
@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary() 

    <fieldset>   
     <ol> 
      <li> 
       @Html.LabelFor(m => m.Code) 
       @Html.TextBoxFor(m => m.Code, new { data_bind= "value: Code", @readonly = "readonly" }) 
      </li> 
      <li> 
       @Html.LabelFor(m => m.Name) 
       @Html.TextBoxFor(m => m.Name, new { data_bind = "value: Name" }) 
      </li> 
      <li> 
       @Html.LabelFor(m => m.GenericName) 
       @Html.TextBoxFor(m => m.GenericName, new { data_bind = "value: GenericName" }) 
      </li> 
     </ol> 
    </fieldset> 

    <input type="submit" data-bind="enable: isDirty" value="Save" /> 
} 

    @section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 
+0

你是什麼意思的 「不工作的人」?它有效嗎?你有什麼改變? DirtyFlag是一個ko插件你引用了正確的腳本文件嗎? – nemesv

+0

你的瀏覽器控制檯窗口中有JS錯誤嗎? – nemesv

+0

瀏覽器中沒有錯誤,它只是不起作用,林不知道如果我有正確的代碼。 – reggieboyYEAH

回答

0

我認爲你在過程中過早地應用綁定。嘗試移動

ko.applyBindings(viewModel); 

下方的形式(即)

@using (Html.BeginForm()) 
{ 
    //your form code stuff here 
} 
<script type="text/javascript"> 
ko.applyBindings(viewModel); 
</script> 
+0

This Works!謝謝 :) – reggieboyYEAH