背景:我对我喜欢的“严肃的javascript/jquery编码”很陌生,我以前的尝试可能会被认为是叛国罪:P。
我的问题:我注意到我们的一些客户端视图模型中有一种模式,并希望将其中一些合并到一个 .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 脚本模式,或者某种程度的东西?