我有一个包含div的局部视图,然后div id当前是静态的。如果我多次使用这个局部视图,我的Javascript类只加载第一个div。为这些div提供唯一ID的MVC约定是什么,所以这不会再发生了?生成一个随机数会起作用吗?
示例代码:
<div id="test"></div>
<script type="text/javascript">
var loader = new Class('test');
</script>
理想情况下,我喜欢它,所以每次渲染局部视图时,都会在id="test
附加一个递增的数字。
答案 0 :(得分:2)
似乎有很多方法可以解决这个问题。看起来重要的是你能够在加载后引用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,这在我的经验中更常见于这种动态代码中。在此解决方案中,您通过partials添加所有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>
希望有所帮助。