multidimensional array in javascript flowchart

User avatar
vasilev
Потребител
Потребител
Posts: 619
Joined: Sat Feb 07, 2009 12:41 pm
Answers: 24
Location: Everywhere
Contact:

multidimensional array in javascript flowchart

Post by vasilev » Wed Apr 25, 2018 10:00 am

здравейте,
трябва ми малко помощ.

datau['properties']['inputs']['input_0']['label'] = "DEMO2";
аlert(datau.toSource());

как може да стане това ? :)

след JSON.stringify :

{properties:{inputs:{input_0:{label:"Input 1"}}}


мерси
Last edited by vasilev on Thu Apr 26, 2018 8:29 am, edited 1 time in total.

User avatar
Revelation
Потребител
Потребител
Posts: 774
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 57

Post by Revelation » Wed Apr 25, 2018 10:31 am

{properties:{inputs:{input_0:{label:"Input 1"}}}}

Това винаги можеш да го използваш по първия начин:

Обектно:
[js]
obj.properties.inputs.input_0.label
[/js]

Като масив:
[js]
obj['properties']['inputs']['input_0']['label']
[/js]

И двата случая ще работят, но не го минавай със stringify. Функцията се използва, ако искаш да пренесеш обекта някъде в низ и след това пак да си го преобразуваш в обект.

User avatar
vasilev
Потребител
Потребител
Posts: 619
Joined: Sat Feb 07, 2009 12:41 pm
Answers: 24
Location: Everywhere
Contact:

Post by vasilev » Wed Apr 25, 2018 11:21 am

.. така става но много код :)

$(document).ready(function() {
var obj={};
var obj2={};
оbj['properties']="test";
obj2['test2']=obj;
alert(obj2.toSource());
...

User avatar
Revelation
Потребител
Потребител
Posts: 774
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 57

Post by Revelation » Wed Apr 25, 2018 11:51 am

http://sebastien.drouyer.com/jquery.flowchart-demo/

Това ли ползваш? Ако е така си на съвсем грешен път.

flowchart метода изисква обект, в който на ключ data да подадеш нужните данни.
Дай някъде по-надолу View Source и виж структурата на обектите.

JavaScript не обича да работи с масиви. Езика е обектно-ориентиран(сбъркана представа за обектно-ориентиран) и работи главно с обекти. Масивите(което реално се нарича масив) в JavaScript нямат ключове, а само стойности. Многомерен масив се постига само с обекти.

И това new array() трябва да го махнеш. Едно че си го написал грешно, второ - работи с обекти.

[js]
var obj = {};

// или

var obj = new Object();
[/js]

Като първия е за предпочитане.

User avatar
vasilev
Потребител
Потребител
Posts: 619
Joined: Sat Feb 07, 2009 12:41 pm
Answers: 24
Location: Everywhere
Contact:

Post by vasilev » Wed Apr 25, 2018 11:56 am

.. промених си отговора :)
да сега го направих така:

var label={};
var input_0={};
var inputs={};
var properties={};
var operators={};
label['label']="DEMO2";
input_0['input_0']=label;
inputs['inputs']=input_0;
properties['properties']=inputs;
operators['operators']=properties;


$flowchart.flowchart('setOperatorData', selectedOperatorId, operators);

но не го променя , не намирам каква точно иска да е датата вътре..

User avatar
Revelation
Потребител
Потребител
Posts: 774
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 57

Post by Revelation » Wed Apr 25, 2018 12:02 pm

vasilev wrote:.. промених си отговора :)
да сега го направих така:

var label={};
var input_0={};
var inputs={};
var properties={};
var operators={};
label['label']="DEMO2";
input_0['input_0']=label;
inputs['inputs']=input_0;
properties['properties']=inputs;
operators['operators']=properties;


$flowchart.flowchart('setOperatorData', selectedOperatorId, operators);

но не го променя , не намирам каква точно иска да е датата вътре..
Отвори пак линка и виж как са структурирани там и какво се подава на flowchart(). И с това омешване обекти-масиви накрая ще се омажеш яко.

User avatar
vasilev
Потребител
Потребител
Posts: 619
Joined: Sat Feb 07, 2009 12:41 pm
Answers: 24
Location: Everywhere
Contact:

Post by vasilev » Wed Apr 25, 2018 12:10 pm

това се подава на setData :

Code: Select all

{
  "operators": {
    "operator1": {
      "top": 20,
      "left": 20,
      "properties": {
        "title": "Operator 1",
        "inputs": {},
        "outputs": {
          "output_1": {
            "label": "Output 1"
          }
        }
      }
   ....
...

}
но на мен ми трябва само setOperatorData. тук не съм сигурен какво се подава. не мога да подам всичко а само input/output чиито имена искам да променя..

може би е по добре да сложа повече код.
това намерих след като дръпнах ultiflow Което той е разработил:

* __setOperatorData(operatorId, operatorData):__
* __Description:__ This method replaces the operator's data. Note that if new connectors are renamed / removed, the flowchart can remove links.
* __Parameters:__
* __operatorId__
* __operatorData__: Same as in `data.operators`.

така обхождам input/output :

[js]var arrinputs=$flowchart.flowchart('getOperatorData', operatorId).properties.inputs;
var arroutputs=$flowchart.flowchart('getOperatorData', operatorId).properties.outputs;
$.each(arrinputs, function (index, value) {
$( $("#inout") ).append( '<div class="form-group"><label for="operator_title">Groups '+index+': </label><input type="text" id="'+index+'" class="form-control grinputs" value="'+value.label+'"/></div>' );
});
$.each(arroutputs, function (index, value) {
$( $("#inout") ).append( '<div class="form-group"><label for="operator_title">Groups '+index+': </label><input type="text" id="'+index+'" class="form-control groutputs" value="'+value.label+'"/></div>' );
});[/js]


след което трябва да взема данните..

[js]$(".grclose").click( function(){
var selectedOperatorId = $flowchart.flowchart('getSelectedOperatorId');
$('.grinputs').each(
function(index){

// alert($(this).val());
//alert($(this).attr('id'));
}
);[/js]


тук ще ги добавя към масива на мястото на алерт просто исках да видя че работи.
но сетването е проблема..

User avatar
Revelation
Потребител
Потребител
Posts: 774
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 57

Post by Revelation » Wed Apr 25, 2018 2:20 pm

Или говорим за различни плъгини или нещо не можем да се разберем. Дай да видя кой точно плъгин използваш, за да не говорим празни приказки.

User avatar
Revelation
Потребител
Потребител
Posts: 774
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 57

Post by Revelation » Wed Apr 25, 2018 2:27 pm

Да опитам да разясня.

Това, което подаваш в flowchart() метода е грешно.

Да вземем тези данни:

[js]
var data = {
"operators": {
"operator1": {
"top": 20,
"left": 20,
"properties": {
"title": "Operator 1",
"inputs": {},
"outputs": {
"output_1": {
"label": "Output 1"
}
}
}
....
...

}
[/js]

[js]
var flowchart = $flowchart.flowchart({
data: data;
});

// или

var flowchart = $flowchart.flowchart();
// Това не съм сигурен дали ще сработи преди
// следващия пример отдолу
flowchart.setOperatorData('operator1', { /** тука слагаш данните за оператор1 **/ });

// следващ пример
var flowchart = $flowchart.flowchart();
flowchart.createOperator('operator1', { ...data });
[/js]

Нещо такова се прави.

User avatar
vasilev
Потребител
Потребител
Posts: 619
Joined: Sat Feb 07, 2009 12:41 pm
Answers: 24
Location: Everywhere
Contact:

Post by vasilev » Wed Apr 25, 2018 6:54 pm

за същото говорим.
така го е написал той в demo-то.. за title:

[js]$GroupTitle.keyup(function() {
var selectedOperatorId = $flowchart.flowchart('getSelectedOperatorId');
if (selectedOperatorId != null) {
$flowchart.flowchart('setOperatorTitle', selectedOperatorId, $GroupTitle.val());
}
});[/js]

аз се опитвам да променя един input с id - input_0:

[js]var label={};
var input_0={};
var inputs={};
var properties={};
var operators={};
label["label"]="DEMO2";
input_0['input_0']=label;
inputs['inputs']=input_0;
properties['properties']=inputs;
operators['operators']=properties;

//$flowchart.flowchart('setOperatorData', selectedOperatorId, operators);
//и така опитвам и следващото, няма резултат
$flowchart.flowchart.setOperatorData(selectedOperatorId, operators);

[/js]

но title е текст докато data си е array.. въпросът е какво точно да се подаде за да смени имената..

Post Reply