文章出處
文章列表
MVC與MVVM的模型
在MVC實例項目中,為我們提供了簡單的增刪改查功能,而這種功能的實現與具體的Model很有關系,或者說它與后臺數據庫的關系過于緊密了,而對于開發人員來說當頁面布局修改后,也會現時修改它們的Model部分,而對于MVVM思想體系來說,它可以不去修改后臺Model,而后采用了一種前臺綁定的方式,很好的實現了前臺模塊與后臺Model的解耦!
實例代碼
本實例主要展現了一個簡單的列表操作,包括了添加,刪除和修改,在使用knockoutjs實現它之后,使它的用戶體驗提升了一個臺階,對于代碼的分層有了一個新的升華!
C#核心代碼
public ActionResult Index() { return View(new List<Product> { new Product{ID=1,Name="test1"}, new Product{ID=2,Name="test2"}, new Product{ID=3,Name="test3"}, new Product{ID=4,Name="test4"}, new Product{ID=5,Name="test5"}, new Product{ID=6,Name="test6"}, }); }
JS核心代碼
var People = function () { this.ID = 0; this.Name = ""; } var model = function () { self = this; self.PeopleList = ko.observableArray(@Html.Raw(Json.Encode(Model))); self.remove = function (o) { self.PeopleList.remove(o); }; self.selectItem = ko.observable(); self.editing = ko.observable(false); self.add = function (o) { self.editing(true); self.selectItem(new People()); } self.edit = function (o) { self.editing(true); self.selectItem(o); } self.selectItem.subscribe(function (o) { // alert("要編輯記錄ID是" + o.ID); }); self.save = function (o) { alert((o.ID > 0 ? "修改數據" : "新建數據") + o.Name); } self.cancle = function () { self.editing(false); } }
HTML核心代碼
<h3> <a href="javascript:void(0)" data-bind="click:add">添加實體</a></h3> <table> <thead> <tr> <th>編號</th> <th>姓名</th> <th></th> </tr> </thead> <tbody data-bind="template:{name:'list',foreach: PeopleList}"> </tbody> </table> <script type="text/html" id="list"> <tr> <td><span data-bind="text:ID"></span></td> <td><span data-bind="text:Name"></span> </td> <td><a href="javascript:void(0)" data-bind="click:$parent.remove">刪除</a> <a href="javascript:void(0)" data-bind="click:$parent.edit">編輯</a> </td> </tr> </script> <fieldset data-bind="with:selectItem,visible:editing"> <legend>正在<span data-bind="if:ID==0">新建</span><span data-bind="if:ID>0">編輯</span></legend> 姓名: <input type="text" data-bind="value:Name" /> <input type="button" data-bind="click:$parent.save" value="保存" /> <input type="button" data-bind="click:$parent.cancle" value="取消" /> </fieldset>
運行效果圖:
$.when實現方法回調
下面介紹JQ里的一個小功能,$.when($.ajax({})).done().done()....,它可以方便的實現方法的回調,done()代碼塊相關于ajax里的success節點里的內容,將代碼從success節點拿出來,放到done()里,它可以使代碼的層次感和可能性更強!
$.when($.ajax({ url: "/home/getProduct", dataType: "JSON", type: "GET", success: function (data) { alert(JSON.stringify(data)); } })).done(function () { alert("哈哈,回調成功了!"); }) .done(function () { ko.applyBindings(new model()); });
文章列表
全站熱搜