我正处于MVC项目的最初阶段。
查看:
<h4>About Me</h4>
<!-- ko if: !isEditingAboutMe() -->
<p data-bind="text: aboutMe()">@Model.AboutMe</p>
@if (Model.CurrentUserCanEdit)
{
<a data-bind="click: editAboutMe">edit</a>
}
<!-- /ko -->
<!-- ko if: isEditingAboutMe() -->
@Html.TextBoxFor(model => model.AboutMe, new { data_bind = "value: aboutMe" })
<a data-bind="click: saveAboutMe">save</a>
<a data-bind="click: cancelAboutMe">cancel</a>
<!-- /ko -->
<script type="text/javascript">$(document).ready(ko.applyBindings(new ProfileVm(@Html.Raw(Json.Encode(Model)))));</script>
ProfileVm:
function ProfileVm(model) {
var self = this;
self.aboutMe = ko.observable(model.AboutMe);
self.saveAboutMe = function() {
// need to put call to dataservice here
self.isEditingAboutMe(false);
};
self.cancelAboutMe = function() {
self.isEditingAboutMe(false);
};
self.isEditingAboutMe = ko.observable(false);
self.editAboutMe = function() {
self.isEditingAboutMe(true);
};
}
现在,我刚刚制作了一个 dataservice.js 文件:
// should I init an object? Not sure how to use this service across multiple js viewmodels
var dataservice = {
updateAboutMe: updateAboutMe // some AJAX function
}
我的问题 - 我需要在多个JS视图模型中使用此数据服务。如何以不需要为每个模型重新创建新的dataservice对象的方式执行此操作?我只需要一个单例,但我不知道A)如何构造dataservice.js的内容以促进这一点,或者B)如何初始化/要求来自调用者的数据服务单例,如profileVm。
我不确定这是否是requireJS会发挥作用的地方,或者我是否可以使用直接js。任何提示都会很棒。