Я предлагаю другой способ, вместо этого вызывайте closeCell () для события редактирования, если вы не хотите, чтобы пользователь мог редактировать ячейку. При этом ячейка не будет отображать ввод, когда пользователь щелкает его, чтобы отредактировать.
<div id="grid"></div>
<script>
$("#grid").kendoGrid({
columns: [
{ field: "id" },
{ field: "name" },
{ field: "age" }
],
dataSource: {
data: [
{ id: 1, name: "Jane Doe", age: 30 },
{ id: 2, name: "John Doe", age: 33 }
],
schema: {
model: {
id: "id",
fields: {
"id": { type: "number" }
}
}
}
},
editable: "incell",
toolbar:["create"],
edit: function(e) {
if (!e.model.isNew() && e.container.index() == 0) {
var grid = $("#grid").data("kendoGrid");
grid.closeCell();
}
}
});
</script>
Этот XPath:
count(//Property[long = '11007'])
возвращает то же значение как:
count(//Property/long[text() = '11007'])
... за исключением того, что первые количества Property
узлы, которые соответствуют критерию и вторым количествам long
дочерние узлы, которые соответствуют критерию.
Согласно Вашему комментарию и чтению Вашего вопроса пару раз, я полагаю, что Вы хотите найти уникальность на основе комбинации критериев. Поэтому в действительности, я думаю, что Вы на самом деле проверяете несколько условий. Следующее работало бы также:
count(//Property[@Name = 'Alive'][long = '11007'])
потому что это означает то же самое как:
count(//Property[@Name = 'Alive' and long = '11007'])
Конечно, Вы заменили бы значениями параметры в Вашем шаблоне. Вышеупомянутый код только иллюстрирует тезис.
РЕДАКТИРОВАНИЕ (после того, как редактирование вопроса)
Вы были совершенно правы о XML том, чтобы быть ужасным. На самом деле это - прямой кандидат CodingHorror! Я должен был продолжать рассказывать для отслеживания узел "Свойства", я шел в настоящее время. Я чувствую Вашу боль!
Вот:
count(/root/ac/Properties/Property[Properties/Property/Properties/Property/long = $parPropId])
Обратите внимание, что я удалил все другие проверки (для идентификатора и Значения). Они, кажется, не требуются, так как Вы можете прибыть в соответствующий узел с помощью иерархии в XML. Кроме того, Вы уже упомянули, что проверка на уникальность базируется только на содержании long
элемент.
Ваш xpath просто немного прочь:
count(//Property/long[text()=$parPropId])
Править: Cerebrus вполне справедливо указывает, что код в Вашем OP (использующий неявное значение узла) абсолютно хорошо для Ваших целей. На самом деле, так как довольно вероятно, что Вы хотите работать с узлом "Свойства", а не "длинным" узлом, это, вероятно, превосходит, просят //Property[long=$parPropId]
чем текст () xpath, хотя Вы могли изложить доводы для последнего о территории удобочитаемости.
Что может я говорить, я немного устал сегодня :)
<xsl:variable name="count" select="count(/Property/long = $parPropId)"/>
Непротестированный, но я думаю, что это должно работать. Я предполагаю, что узлы Свойства являются прямыми детьми корневого узла и для этого вынимания Вашего порожденного селектора для производительности