1
上下文:我很喜歡我認爲的「嚴肅的javascript/jquery編碼」,我以前的嘗試可能會被認爲是叛逆:P。擴展javascript通用視圖模型。 (Knockout)
我的問題:我注意到我們的一些客戶端視圖模型中的模式,並希望將它們中的一些整合到一個.js文件中。
一切似乎是工作的大多數情況下,除了在那裏我需要創建一個額外的可觀測值的畫面,不一定映射到從服務器返回我的JS對象。
var AdminPages = AdminPages || {};
AdminPages.SimplePageVM: function (options) {
var self = this;
self.hasChanges = function() {};
self.isValid = function() {};
// CRUD Actions
self.get = function() {
$.ajax({
url: options.getUrl,
dataType: 'json',
data: !$.isEmptyObject(options.someId) ? { someId: options.someId} : null,
success: function (result) {
self.observables = ko.mapping.fromJS(result);
ko.editable(self.observables);
ko.applyBindings(self, $('form')[0]);
},
error: function (result) {}
});
};
self.save = function() {};
self.edit = function() {};
self.cancel = function() {};
// Initialise the viewmodel on create
self.get();
}
我想將以下內容添加到視圖模型中。我想我需要創建一個全新的對象,(因爲self.observables只會在get函數成功時創建),然後將我的新對象及其屬性添加到item綁定。
什麼我還想補充:
self.newObject.IsPercentageEvaluation =
ko.computed(function() {
var isPercentage = self.observables.IsPercentageBased() == 'true';
if (isPercentage) {
self.observables.BalancePercentage('40');
} else {
self.observables.BalancePercentage('');
}
return isPercentage;
});
,並呼籲這一切:
$(function() {
var obj = {
IsPercentageEvaluation = ko.computed(...);
};
AdminPages.SimplePageVM({
getUrl: '@Url.Action("Get", "SomeController")',
editUrl: '@Url.Action("Update", "SomeController")',
organisationId: '@ViewBag.OrganisationID',
newObject: obj
});
} ($));
我只是想確認這是否是接近這種情況的正確方法是什麼?或者,如果有更好的方法,例如使用某種特定的Java腳本模式,或者達到那種程度?
我誤解你的第一個觀點@第一,否則我會接受更快......謝謝你,我想我會嘗試可覆蓋的功能/鉤選項。關於你的第二點,如果你們還沒有解決這個問題,我使用amplify來掛鉤我們創建的全局事件,該事件管理我們在應用程序中獲得的通知欄。 –
介紹如何創建可覆寫的功能。 到目前爲止,我的最佳嘗試是這樣的。 self.observables = ko.mapping.fromJS(result); ko.mapping.fromJS(options.customObservables,self.observables); ....但它不工作,因爲我沒有訪問自我。觀察對象當我創建自定義計算/觀察值時 –
定義像hasChanges函數一樣的函數。從ajax.success中調用它。然後,當您實例化類時,爲虛擬版本分配一個新函數。如果您仍然遇到問題,我可以在今晚更新我的答案以示例 –