Ich habe eine Strukturansicht entwickelt, die Knockout verwendet, um eine Hierarchie anzuzeigen. Ich habe eine seltsame Situation innerhalb von Chrome bemerkt, die passiert, wenn ich einen Knoten im Baum zusammenfalte. Der Text für den Knoten verschwindet zusammen mit den darunter liegenden Elementen. Ich dachte mir, dass etwas mit meinem Code nicht in Ordnung ist, und habe dann herausgefunden, dass es sowohl in IE als auch in Firefox korrekt funktioniert. Ich habe unten die Geige erstellt, die das Problem mit einem zusätzlichen Code auf meiner Seite demonstriert. Wenn Sie einen Knoten erweitern und dann ausblenden (der Plus-Button ändert sich nicht wie in meinem vollständigen Code), verschwindet der Text. Dann können Sie einfach irgendwo auf die Seite klicken, um den Text wieder anzuzeigen.Chrome Bug mit Knockout?
Der Text, der in einem Kommentar in rot wurde wie empfohlen skizziert verschwindet und im Screenshot
ich dieses heraus auf 4 Maschinen getestet und auf jeder tut es nicht gesehen werden kann arbeite, wenn ich Chrome verwende. Ist das ein Fehler in Chrome oder mache ich etwas falsch? Kann irgendjemand irgendeine Möglichkeit sehen, dieses Problem zu umgehen, wenn es sich um einen Bug in Chrome handelt?
console.clear();
var hierarchyNode = function (parent) {
var self = this;
this.name = "Node Name";
this.hasChildren = ko.observable(true);
this.childNodes = ko.observableArray();
this.expanded = ko.observable(false);
};
hierarchyNode.prototype = {
name: null,
hasChildren: null,
childNodes: null,
getChildNodes: function (element, event) {
if (element.hasChildren() === true && element.childNodes().length === 0) {
element.childNodes.push(new hierarchyNode(element));
}
element.expanded(!element.expanded());
}
};
var hierarchyVM = function() {
var self = this;
self.hierarchyNodes = ko.observableArray();
self.selectItem = function() {};
};
var vm = new hierarchyVM();
vm.hierarchyNodes.push(new hierarchyNode(null));
console.log(vm.hierarchyNodes()[0]);
ko.applyBindings(vm);
ul.tree {
list-style-type: none;
padding-left: 10px;
}
.hierarchyNode {border: 1px solid red;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="tree" data-bind="template: { name: 'itemTmpl', foreach: $data.hierarchyNodes }"></ul>
<script id="itemTmpl" type="text/html">
<li>
<button data-bind="click: getChildNodes">+</button>
<div data-bind="visible: hasChildren() == false" class="tree-spacer"></div>
<span data-bind="text: name" class="no_selection hierarchyNode"></span>
<ul class="tree" data-bind="template: { name: 'itemTmpl', foreach: $data.childNodes }, visible: expanded"></ul>
</li>
</script>
Wow, das ist schrecklich, aber wunderbar seltsames Verhalten ... – Jeroen
Wenn ich die 'span', die nicht in der Dev Toolbar" Elements "Registerkarte angezeigt wird, ist die Box * auf der Seite markiert, aber es gibt keinen Text in der Tat. Seltsame Dinge passieren. Wäre schön, wenn jemand das in einem anderen Webkit Browser überprüfen könnte. – Jeroen
Ich schlage vor, '.hierarchyNode {border: 1px solid pink; } 'zu Ihrem Beispiel zu klären und vielleicht auch [dieser Screenshot] (http://i.stack.imgur.com/qdjSx.png) oder ähnlich, damit die Leute wissen, worauf sie achten müssen. – Jeroen