- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从KnockoutJS添加的DOM
中读取data-product-id
。
我有以下标记:
<!-- ko foreach: Summary.products -->
<li data-bind="attr: { 'data-product-id': id }">
<div class="product-summary-actions float-right">
<button class="btn btn-danger btn-mini remove-item">
<i class="icon-remove"></i>
</button>
</div>
<div class="product-summary-quantity">
<h6 data-bind="text: infoComposition"></h6>
</div>
<div class="product-summary-description">
<p data-bind="text: name"></p>
</div>
</li>
<!-- /ko -->
如您所见,在带有 attr
绑定(bind)的注释之后的第一行有一个数据绑定(bind)。看:
<li data-bind="attr: { 'data-product-id': id }">
当我使用 Chrome 的控制台检查我的 DOM 时,我有以下内容:
<li data-bind="attr: { 'data-product-id': id }" data-product-id="1">...</li>
如您所见,data-product-id
已成功 应用。但是,当我不得不与他进行交流时,没有成功。
我的应用程序中有一个函数负责检查我的产品摘要中是否存在某个项目,以下循环执行此操作:
$(element).each(function () {
var $productId = $(this).closest("li").data("product-id"),
$match = $(".summary")
.find("li[data-product-id=" + $productId + "]").length > 0;
console.log($match);
});
总是返回false。换句话说,jQuery 似乎不考虑 KnockoutJS 生成的 data-product-id
因为如果我手动将 data-product-id
属性添加到我的项目(像下面的标记),一切正常。
<!-- ko foreach: Summary.products -->
<li data-product-id="1">
<div class="product-summary-actions float-right">
<button class="btn btn-danger btn-mini remove-item">
<i class="icon-remove"></i>
</button>
</div>
<div class="product-summary-quantity">
<h6 data-bind="text: infoComposition"></h6>
</div>
<div class="product-summary-description">
<p data-bind="text: name"></p>
</div>
</li>
<!-- /ko -->
我的必需 HTML:
<button class="btn btn-success btn-small add"
title="Add to comparison list">
<i data-bind="attr: { class: ProductLayout.existsAtSummary($element) ?
'icon-minus' : 'icon-plus' }">
</i>
</button>
我的JS:
function ProductLayoutViewModel() {
var self = this;
self.itemQuantity = ko.observable("");
self.itemQuantityValid = ko.computed(function () {
var q = self.itemQuantity();
return q != "0" && q != "00" && q != null && q != "";
}, this);
self.existsAtSummary = function (element) {
$(element).each(function () {
$productId = $(this).closest("li").data("product-id");
$match = $(".summary")
.find("li[data-product-id=" + $productId + "]").length;
if (!$match)
return true;
else
return false;
});
});
};
ViewModel = {
Summary: new SummaryViewModel(),
ProductLayout: new ProductLayoutViewModel()
};
$.ajax({
url: "/ProductsSummary/List?output=json",
dataType: "json",
success: function (data) {
var mappingOptions = {
create: function (options) {
return (new (function () {
this.finalMeasure = ko.computed(function () {
return this.quantity() > 1 ?
this.measure() + "s" : this.measure();
}, this);
this.infoComposition = ko.computed(function () {
return this.quantity() + ' ' + this.finalMeasure();
}, this);
ko.mapping.fromJS(options.data, {}, this);
})());
}
};
ViewModel.Summary.products = ko.mapping.fromJS(data, mappingOptions);
ko.applyBindings(ViewModel);
}
});
有人知道我该如何解决这个问题?谢谢!
最佳答案
看起来你的时间有问题。
请注意,knockoutjs 首先遍历您的 js 模型,然后用内容填充 View 。因此,如果您正在测试或在您的情况下迭代某些 DOM 结构,您会直接遇到计时错误。
尝试重新思考您在那里所做的事情。由于 knockoutjs 正在为 html 提供数据,因此您的 js 代码中已经拥有所有数据。对我来说,这看起来像是一个变通办法。
例如:您的模板:
<!-- ko foreach: Summary.products -->
<li data-bind="attr: { 'data-product-id': id }">
</li>
<!-- /ko -->
在 knockoutjs 中,您已经有了产品列表和特定的产品 ID。所以您需要做的就是检查列表的长度?还是我错过了什么?
如果我弄错了,而你只是想触发另一个在呈现列表时执行某些操作的 javascript,请尝试在 knockoutjs 用内容填充你的页面时触发一些事件。或者在 dom 准备好后触发你的 javascript。
关于javascript - 数据绑定(bind) "attr"不起作用(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17405226/
我只是想知道下面的$(*[attr])和$([attr])中哪一个更可取。为什么? 因为两者都在做同样的事情。 $('[onclick]').each(function(i,elem){ cons
长期以来我一直在尝试找出问题所在,但不幸的是无法 如果我这样做 android.enableAapt2=true 代码工作正常,但是删除相同的(应该是强制性的)会抛出一个错误说 \incrementa
使用此代码: $('#ipadmenu section').attr('data-order', hash) 我将 data-order 属性设置为“hash”的值。如何选择具有该属性/值的元素而不是
我有一个用于扩展的组合框监听器。展开后,它会对组合框选项中具有特定类的每个元素执行一些样式设置。所需的更改之一是根据当前属性的值更改属性。使用 this 返回未定义。 expand : funct
性能上有区别吗 :not([attr="value"]) 和 [attr!="value"] ? CSS3 规范是否推荐了一种替代方案? 编辑: CSS3 规范不包含 [attr!="value"]
所以我有一个叫做 say,mySave 的指令,它几乎就是这个 app.directive('mySave', function($http) { return function(scope,
有人可以告诉我有什么区别吗 ?android:attr/colorPrimary 和 ?attr/colorPrimary 无论我使用哪个,结果都是一样的。尽管第一个选项导致android.view.
Xpath问题: 何时使用@和属性,何时不使用。有关系吗?有什么区别 最佳答案 使用//tag[attr]时,将选择所有具有至少一个名为tag的子元素的attr元素。另一方面,使用//tag[@att
android布局xml文件中的?android:attr/和?attr/有什么区别?在不同的情况下我们应该使用哪一个? 最佳答案 1。 ?attr/ 定义并引用您在应用程序中自行定义的属性的值。 2
如果 obj 不存在 obj? 生成一个 nil 所以 obj?.attr 也是。 如果 obj 为 nil,则 obj!.attr 崩溃。 但是如果我确定 obj 在代码的某个点总是存在,那么对我来
有一个这样的 HTML。 Back 1 2 3 Next 为了获得最大的页数,我写了这篇文章。 doc = Nokogiri::HTML(html) doc.xpath('//
我想知道这些标签在 android xml 中如何工作。例如在造型方面 style="?android:attr/buttonBarButtonStyle" 和 style="@android:att
这是我的代码: $("input[name=donationmode]").change(function() { $(".setpaymentOptions").children().add
我已经搜索了一段时间,但没有找到我正在搜索的内容。 事情是这样的,我有两张表,我们称它们为表 A 和 B。当 A 更新时,我需要更新 B 中的属性。例如:A. 电子邮件和 B. 电子邮件。当用户在 A
大家好,在访问一个循环的 php 变量时遇到了一个小问题。我的脚本循环使用来自 mysql 数据库的 x 和 y。它还循环出我无法访问的 id,它显示为未定义。我正在使用鼠标移开功能来检测已循环的每个
我将自己的标签转换为输入。我可以使用 select 为输入选择只读/禁用。我做到了。有用。但不是在 ie8 )). 我阅读了 Angular 和 IE8 的官方文档。我添加了它。但是我的应用程序在 i
我正在使用令人惊叹的 attrs 库以一种非常优雅的方式定义许多对象属性,到目前为止它一直运行得非常棒。 我目前遇到的唯一问题是,有时我想通过引用其他 attr.ib() 属性来定义默认值。如果 na
我注意到 javascript 有几种方法来设置和获取元素的属性。 我不确定它们之间有什么区别。特别是,是否存在跨浏览器问题。 最佳答案 DOM 元素的特性和属性有很大不同,这种差异是一些混淆的根源。
在 4.x 设备上,使用 ?android:attr/selectableItemBackgroundBorderless 的布局文件会导致崩溃,但 ?attr/selectableItemBackg
.attr('disabled', 'disabled') 和 .attr('disabled', true) 在我的代码中都有效,但我只是想知道:两者中哪一个更有效和/或哪一个更常用?真的有区别吗?
我是一名优秀的程序员,十分优秀!