2015-07-06 4 views
1

Я хочу создать несколько textBlock только в том случае, если текст в данных равен определенной строке. Если нет - я хочу создать только один текстовый блок.Как получить данные узла, внутри шаблона в GOJS?

var template = GO(go.Node, "Auto",{desiredSize: new go.Size(width, height) },  
        GO(go.Shape, shapeMap.getValue(shape), new go.Binding("fill", "fill")), 
        (???? .includes("[UMS]")) ? 
         GO(go.Panel, "Vertical", 
          GO(go.TextBlock,{font: "7pt serif"}, new go.Binding("stroke", "color"), new go.Binding("text", "txtPart1")), 
          GO(go.TextBlock,{text: "[UMS]", font: "7pt serif", click: function(e, obj) {window.open("https://" + obj.part.data.key + ":8090")}}, new go.Binding("stroke", "color")), 
          GO(go.TextBlock,{font: "7pt serif"}, new go.Binding("stroke", "color"), new go.Binding("text", "txtPart2"))) 
         : 
          GO(go.TextBlock,{font: "7pt serif"}, new go.Binding("stroke", "color"), new go.Binding("text", "txtPart1")) 

         ); 

Как проверить на data.text, если он включен или нет?

(я знаю, как получить его внутри функции: нажмите: функция (е, объект) {вернуться obj.part.data.key}

или как объявить его - с помощью Binding - так что данные будут на узел, а не в шаблон. , но в коде внутри шаблона ??)

ответ

1

Вы можете добавить привязку данных, которые связывают это TextBlock «s или Panel» видимость к data.text s. Вот один из таких примеров:

 new go.Binding("visible", "text", function(textvalue) { 
     return (textvalue.indexOf("[UMS]") >= 0); 
     }) 

В этом примере, если текст не содержит "[UMS]", то GraphObject, который имеет такое связывание будет невидимым (он не будет отображаться, и он не будет занимать место).

Вот полный пример: http://codepen.io/simonsarris/pen/jPzyoa?editors=001

Всего шаблон для потомков:

myDiagram.nodeTemplate = 
    $(go.Node, "Vertical", 
    new go.Binding('background', 'color'), 
    $(go.TextBlock, 
     { margin: 3 }, 
     new go.Binding("text", "key")), 
    // This textblock will be hidden if the data.text does not contain "three" 
    $(go.TextBlock, 
     { margin: 3 }, 
     new go.Binding("text", "text"), 
     new go.Binding("visible", "text", function(textvalue) { 
     return (textvalue.indexOf('three') >= 0); 
     }) 
    ) 
); 

Вы можете прочитать больше о функциях преобразования привязки данных и здесь: http://gojs.net/latest/intro/dataBinding.html

+0

Я пытался использовать функцию внутри binding, , но у меня не было идеи использовать его в видимой собственности. прохладный & большой. Тпй. – BIBI