我有一个包含div的局部视图,然后该div id当前是静态的。如果我多次使用此局部视图,那么我的Javascript类只会加载第一个div。为这些div赋予唯一ID的MVC约定是什么,这样就不再发生了?生成随机数会起作用吗?
样例代码:
<div id="test"></div>
<script type="text/javascript">
var loader = new Class('test');
</script>
理想情况下,我希望这样,因此每次渲染局部视图时,都会在后面附加一个递增的数字id="test
。
似乎有很多方法可以解决此问题。看起来很重要的一点是,在加载JS类之后,能够引用该元素。我想到了几种方法。
1)通过JS动态添加div(我在这里使用jquery来简化任务):
添加到您的类定义中:
<script type='text/javascript' >
/* you need to add a static method to your class to create
a unique id.
Note that this should not be part of your partial view - it
is only defined once - wherever you have defined your class.
*/
Class.idNum = 0;
Class.uniqueId = function() { return 'MyDiv_' + idNum++; };
</script>
部分变为:
<script type='text/javascript' >
// you need to have a
var newId = Class.uniqueId();
var newDiv = jQuery('<div id="' + newId + '" />' );
// figure out where you need to append it, e.g. to the html body:
jQuery('body').append( newDiv );
var loader = new Class( newId );
</script>
2)但是,一种更简单的方法可能是完全避免使用id,根据我的经验,这在这种动态代码中更为常见。在此解决方案中,您通过分部添加所有div,将它们标识为具有唯一类名称的组,然后引用该类名称以将所有这些div作为组抓取并遍历它们以创建您的类。当然,您将不得不重写您的类以通过其DOM元素而不是ID属性来引用这些div。
部分变成:
<div class='MyDescriptiveClassName' ></div>
然后,在添加完所有部分之后,您将获得类似以下javascript的内容:
<script type='text/javascript' >
jQuery('.MyDescriptiveClassName').each( function( index, elem ) {
// pass in the DOM element for accessing this div.
var loader = new Class( elem );
});
</script>
希望能有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句