コンテキスト: 私は、「真面目な javascript/jquery コーディング」と考えるのが好きなことにはまったく慣れていません。私の以前の試みは、おそらく反逆罪と見なされるでしょう :P.
私の質問: クライアント側のビュー モデルのいくつかにパターンがあることに気付き、それらのいくつかを 1 つの .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 関数の成功時にのみ作成されるため)、新しいオブジェクトとそのプロパティをアイテム バインドに追加します。
追加したいID:
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スクリプトパターンを利用するなど、より良い方法がある場合、またはその程度のものはありますか?