【发布时间】:2020-07-30 07:33:57
【问题描述】:
我正在将我的部分视图移动到视图组件,因为根据 Microsoft 的组件明显优于部分视图,尤其是在处理复杂视图时..
对于我现在移植到视图组件的部分视图,我有很多 jQuery 脚本。通常我在 $(document).ready() 函数中调用我的 jQuery 组件,如下所示:
$(document).ready(function(){
Component1.init();
Component2.init();
....
})
这个逻辑非常有用,因为这些视图必须多次更新。因此,当有部分视图时,组件会重新初始化,因为当部分视图文档在更新后准备好时,$(document).ready() 函数总是会触发。
但是,转到查看组件时,我仍然尝试这样做。不幸的是,我意识到$(document).ready() 仅在视图组件准备就绪时才被触发——这意味着,在更新视图组件时,$(document).ready() 函数不会被触发,因此不会初始化 jQuery 组件。我正在使用标准的 Ajax 调用来定位返回视图组件的控制器 - 一切正常,除了 $(document).ready() 函数在更新后没有被触发。
注意
一种解决方法是在 ajax 成功响应中初始化我的组件。这可行,但不是可取的。
- 这是怎么回事?
- 为什么我的
$(document).ready()函数在更新视图组件后没有触发? - 如何正确解决这个问题,以便在视图组件准备好后初始化我的所有 jQuery 组件?
示例:
//view with component
<div id="Component">
<vc:mycomponent lead="Model.Lead"></vc:mycomponent>
</div>
//Script Inside component
<script>
$(document).ready(function () {
Component.init();
});
var Component = (function () {
var $button;
var $component
var init = function() {
cacheDom();
handlers();
}
var cacheDom = function(){
var $button = $('#button1')
var $component = $('#Component')
}
var handlers = function () {
$button.on('click', function() {
handleclick();
})
}
var handleClick = function(){
$.ajax({
url: 'Controller/ViewComponent',
type: 'GET',
success: function (response) {
$component.html(response);
}
});
}
return {init : init}
})
</script>
【问题讨论】:
-
您能否添加一个以前有效但现在无效的具体示例(精简到最低限度以显示应该有效的内容)?在进行 AJAX 调用之前不应触发 onReady 函数,除非您正在加载的内容有自己的脚本文件。
-
我刚刚更新了我的问题。我不确定这有什么不同。
-
确实如此。再澄清一点:脚本是否在一个部分中加载(即
@section scripts,或类似的)? -
不是!页面底部只是一个普通的
标签: jquery asp.net-mvc asp.net-core