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
Web-tourist
Web-tourist
Posts: 803
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
Web-tourist
Web-tourist
Posts: 803
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
Web-tourist
Web-tourist
Posts: 803
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
Web-tourist
Web-tourist
Posts: 803
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 57

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

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

User avatar
Revelation
Web-tourist
Web-tourist
Posts: 803
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