javascript – 包括特定于ASP.NET MVC4视图或部分视图的脚本
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 包括特定于ASP.NET MVC4视图或部分视图的脚本,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3939字,纯文字阅读大概需要6分钟。
内容图文
![javascript – 包括特定于ASP.NET MVC4视图或部分视图的脚本](/upload/InfoBanner/zyjiaocheng/786/82dda9d41ffc477c9484373baef19968.jpg)
我已经查看了类似于How to add a script in a partial view in MVC4?和MVC4 partial view javascript bundling Issue的一些问题,并且在查看特定于脚本的脚本时,我仍然在努力理解ASP.NET MVC架构.对于试图在其MVC4部分视图中包含脚本的其他人而言,似乎是将脚本置于更高级别的答案.但是某些脚本无法移动到更高级别,它将在全局范围内运行更多.例如,我不想运行将knockout.js数据绑定应用于未加载控件的视图模型的脚本.而且我不希望为每次加载页面时都不活动的一大堆视图运行一大堆脚本.
所以我开始在我的.vbhtml视图中使用特定于视图的@Section脚本块来包含特定于视图的脚本.但是,正如其他人所指出的,这在局部视图中不起作用.我正在构建我们的架构原型,看看我们能做什么,不能做什么.我想在某些情况下,我可以将视图用作部分视图,反之亦然.但是当您拉入视图以用作部分视图时,@ Section脚本块不会呈现.我已经设法以一种方式全局定义我的所有viewmodel脚本,这样我只需要运行一行代码来创建和绑定视图模型,但我仍然只需要在特定视图处于活动状态时运行一行代码.我在哪里可以在局部视图中适当添加这行代码?
ko.applyBindings(window.webui.inventoryDetailViewModel(ko, webui.inventorycontext));
我在这里走正路吗?这是构建MVC应用程序的正确方法吗?
编辑发现这个问题与我的问题密切相关,并且包括我的答案的重要部分:Can you call ko.applyBindings to bind a partial view?
解决方法:
以下是我编写视图模型和视图的方法:
// ~/scripts/app/viewModels/primaryViewModel.js
var primaryViewModelFactory = (function() {
return { // this gives a singleton object for defining static members and preserving memory
init: init
}
function init(values) {
var model = {
// initialization
secondaryViewModel: secondaryViewModelFactory.init(values);
}
// I've decided to allow root-level view models to call apply bindings directly
ko.applyBindings(model);
}
}());
// ~/scripts/app/viewModels/secondaryViewModel.js
var secondaryViewModelFactory = (function() {
return {
init: init
}
function init(values, target) {
return = {
// initialize object
};
}
}());
在我的视图中,我的主模板中有一个脚本部分.所以我的观点看起来像这样:
@section scripts {
<script src="~/scripts/app/viewModels/....js"></script>
$(function() {
var vm = primaryViewModel.init(@Html.Raw(Json.Encode(Model));
});
}
事实上,我写这些MVVM应用程序越多,我就越倾向于使用ajax来加载数据而不是将模型数据传递给init函数.这使我能够将init调用移动到工厂中.那么你会得到类似的东西:
var primaryViewModelFactory = (function() {
init();
function init(values) {
var model = {
// initialization
}
model.secondaryViewModel = secondaryViewModelFactory.init(values, model);
// I've decided to allow root-level view models to call apply bindings directly
ko.applyBindings(model);
}
}());
这将我的视图脚本简化为一个简单的脚本标记:
@section scripts {
<script src="~/scripts/app/viewModels/primaryViewModel.js"></script>
}
最后,我喜欢在部分视图中为vm组件创建脚本模板,如下所示:
?/ Views / Shared / ScriptTemplates / _secondaryViewModelTemplates.cshtml的局部视图
<script src="@Url.Content("~/scripts/app/viewModels/secondaryViewModel.js")"></script>
<script id="secondary-view-model-details-readonly-template" type="text/html">...</script>
<script id="secondary-view-model-details-editor-template" type="text/html">...</script>
<script id="secondary-view-model-summary-template" type="text/html">...</script>
这里发生了一些事情.首先,导入关联的脚本.这可确保在呈现部分时包含必要的视图模型工厂脚本.这允许主视图对子组件(其可能具有多个)的脚本需求保持无知.此外,通过在部分文件中而不是在脚本文件中定义模板,我们还可以使用非常有用的HtmlHelper和UrlHelper以及您选择的任何其他服务器端实用程序.
最后,我们在主视图中渲染模板:
@section scripts {
@* primaryViewModel has a dependency on secondaryViewModel so the order does matter *@
@Html.Partial("ScriptTemplates/_secondaryViewModelTemplates.cshtml")
<script src="~/scripts/app/viewModels/primaryViewModel.js"></script>
}
<div data-bind="template: {name: 'secondary-view-model-details-editor-template', with: secondaryViewModel}"></div>
这是很多代码,它都是用SO编写的,所以可能会有一些错误.在过去的几年里,我一直在不断发展这种MVVM MVC架构,它的开发周期确实得到了改进.希望这对你也有好处.我很乐意回答任何问题.
内容总结
以上是互联网集市为您收集整理的javascript – 包括特定于ASP.NET MVC4视图或部分视图的脚本全部内容,希望文章能够帮你解决javascript – 包括特定于ASP.NET MVC4视图或部分视图的脚本所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。