我是ASP.NET MVC的新手。我有一个asp .net MVC应用程序。我有一个视图index.cshtml。我有两个JS文件: - Master.js和Child.js。所有JS函数都在Master.js中定义,这些函数在Child.js文件中使用。
我收到以下错误:对象不支持属性或方法'method1'。
如果我复制Master.js的整个代码并将其放在Child.js的代码之上,那么它在MVC应用程序中工作得非常好。
这两个JS文件在ASP.NET Web表单应用程序中运行良好。
我尝试在_layouts.cshtml和child.js index.cshtml中加载master.js文件。我希望master.js会在child.js之前加载。
index.cshtml: -
@section JavaScript
{
<script src="../Scripts/jquery-1.9.1.min.js" type="text/javascript"></script>
<script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjax.js"></ script>
<script src="../Scripts/child.js" type="text/javascript"></s cript>
}
layout.cshtml:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title</title>
@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/Master.js")
@RenderSection("javascript", false)
</head>
<body>
@RenderBody()
</body>
</html>
提前致谢
其他信息:
在Master.js中:我正在扩展方法如下:
$.fn.method1 = function()
{
//My Code
};
我是child.js:我使用的方法如下:
$('#MyDiv').method1();
我遇到以下链接:
答案 0 :(得分:0)
我通常会像这样包装扩展函数:
(function ($) {
$.fn.method1 = function() {
//My Code
};
})(jQuery);
根据documentation,这似乎是推荐的方式。它有助于避免$
对象上的冲突。
[...]与其他插件配合良好,仍然可以使用 在jQuery $别名中,我们需要将所有代码放在一个 立即调用函数表达式,然后传递函数 jQuery,并将参数命名为$
如果您尝试通过捆绑包加载这些脚本,则需要以下内容:
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/jquerywithcustomscripts").Include(
"~/scripts/jquery-{version}.js",
"~/scripts/master.js",
"~/scripts/child.js"));
}
}
在_Layout.cshtml中使用它:
Scripts.Render("~/bundles/jquerywithcustomscripts")
答案 1 :(得分:0)
在您包含jQuery之前,我认为您正在包含Master.js函数。渲染时,标题部分在发送到浏览器时会如下所示:
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title</title>
<script type="text/javascript" src="/bundles/modernizr"></script>
<script type="text/javascript" src="/master.js"></script>
<script src="../Scripts/jquery-1.9.1.min.js" type="text/javascript"></script>
<script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/4.5.1/1/MicrosoftAjax.js"> </script>
<script src="../Scripts/child.js" type="text/javascript"></script>
</head>
如果你在master.js中扩展jQuery,你需要在master.js引用之前包含jQuery。当你将master.js中的所有代码复制到child.js时它可能起作用的原因是因为到那时jQuery已被定义。