Javascript 在呈现之后,带有jquery包装的元素不会被重新确认
我有一个layoutView,它存储聚焦元素,因此:Javascript 在呈现之后,带有jquery包装的元素不会被重新确认,javascript,jquery,backbone.js,marionette,Javascript,Jquery,Backbone.js,Marionette,我有一个layoutView,它存储聚焦元素,因此: this.model.searchBookingTriggerElement = document.activeElement; layoutView被重新渲染,我尝试触发以下操作: onRender: function() { var self = this; _.defer(function() { if (self.model.searchBookingTriggerElement) {
this.model.searchBookingTriggerElement = document.activeElement;
layoutView被重新渲染,我尝试触发以下操作:
onRender: function() {
var self = this;
_.defer(function() {
if (self.model.searchBookingTriggerElement) {
$(self.model.searchBookingTriggerElement).hide();
}
});
}
这不起作用,我无法理解,因为元素似乎是正确的
当我执行console.log(self.model.searchbookingtriggerement)时代码>我得到:
<button type="submit" class="btn button item-component btn-medium btn-green">Buscar</button>
它按预期工作(隐藏元素),为什么jquery不能识别所选的按钮元素
我发现的一个线索是当我在空中盘旋时
<button type="submit" class="btn button item-component btn-medium btn-green" style="display: none;">Buscar</button>
我认为注释非常清楚,一旦重新渲染,您选择的元素就消失了。我假设您是创建布局的人,所以您可能可以为可以选择的每个元素指定一个唯一的id,因此每次渲染时所需的只是id
this.searchBookingTriggerElement = document.activeElement.id;
我遗漏了延迟,但你可以加进去-
onRender: function() {
var self = this;
if (self.searchBookingTriggerElement) {
$('#' + self.searchBookingTriggerElement).hide();
}
}
我认为注释非常清楚,一旦重新渲染,您选择的元素就消失了。我假设您是创建布局的人,所以您可能可以为可以选择的每个元素指定一个唯一的id,因此每次渲染时所需的只是id
this.searchBookingTriggerElement = document.activeElement.id;
我遗漏了延迟,但你可以加进去-
onRender: function() {
var self = this;
if (self.searchBookingTriggerElement) {
$('#' + self.searchBookingTriggerElement).hide();
}
}
您看到的行为表明,searchbookingtriggerement
与$('button')[0]
不是同一个元素。如果您正在重新渲染,那么我希望所有旧的DOM元素都被删除,然后替换为新的元素。如何修复?可能您应该将所选状态存储为视图属性或模型属性,将DOM元素存储为模型属性是非常奇怪的。@muistooshort嘿,谢谢!我不确定你的建议是什么,不管怎样,我看到了,我会得到属性和类,然后选择它,但我不确定这是否有效,因为我不知道哪个元素将处于焦点,也不知道它是否具有类或id等。所以我想选择dom元素本身,感谢不使用model属性的建议,我将停止使用它,但我不确定这会有什么帮助,因为我仍然必须选择它,即使bizzare,我也有这个对象(即使它不存在),所以从属性获取它不会有太大的改变。渲染应该有效地执行some_el.html(new_html)
这将破坏某些节点中的所有内容
在创建新节点之前,您最终会引用一个不再在页面上的DOM元素,这就是为什么对SearchBookingTriggerement
执行操作不会影响页面的原因。为什么您的模型或类似模型上没有“selected”属性?这样,您就不会试图在DOM中存储状态,DOM只会显示存储在别处的状态。this.model.searchbookingtriggerement=document.activeElement
您是如何/何时执行此代码的。。?ypu是否可以发布..?我认为您还应该删除“defer”函数,并将代码移动到“onAttach”回调中隐藏元素,而不是“onRender”。您看到的行为表明searchBookingTriggerElement
与$('button')[0]
不是同一个元素。如果您正在重新渲染,那么我希望所有旧的DOM元素都被删除,然后替换为新的元素。如何修复?可能您应该将所选状态存储为视图属性或模型属性,将DOM元素存储为模型属性是非常奇怪的。@muistooshort嘿,谢谢!我不确定你的建议是什么,不管怎样,我看到了,我会得到属性和类,然后选择它,但我不确定这是否有效,因为我不知道哪个元素将处于焦点,也不知道它是否具有类或id等。所以我想选择dom元素本身,感谢不使用model属性的建议,我将停止使用它,但我不确定这会有什么帮助,因为我仍然必须选择它,即使bizzare,我也有这个对象(即使它不存在),所以从属性获取它不会有太大的改变。渲染应该有效地执行some_el.html(new_html)
这将破坏某些节点中的所有内容
在创建新节点之前,您最终会引用一个不再在页面上的DOM元素,这就是为什么对SearchBookingTriggerement
执行操作不会影响页面的原因。为什么您的模型或类似模型上没有“selected”属性?这样,您就不会试图在DOM中存储状态,DOM只会显示存储在别处的状态。this.model.searchbookingtriggerement=document.activeElement
您是如何/何时执行此代码的。。?ypu是否可以发布..?我认为您还应该删除“defer”函数,并将代码移动到“onAttach”回调中隐藏元素,而不是“onRender”。此外,为什么需要重新渲染?您可以在不重新渲染的情况下隐藏它,因为它是一个布局,如果有需要替换的内容,您可以在不重新渲染的情况下替换它们。此外,为什么需要重新渲染?您可以在不重新渲染的情况下隐藏它,并且由于它是一个布局(如果有需要替换的内容),因此您可以在不重新渲染的情况下替换它们。