- multidimensional array in javascript flowchart
12
WT форуми -> HTML / Javascript / CSS -> multidimensional array in javascript flowchart
Създайте нова тема Напишете отговор 
Автор Съобщение
vasilev
Потребител
Потребител

Регистриран на: 07/02/2009 2:41 pm

Support: 24
Bonus: 45
Мнения: 603
Мнение 25/04/2018 12:00 pm     multidimensional array in javascript flowchart Отговорете с цитат


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

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

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

след JSON.stringify :

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


мерси

Последната промяна е направена от vasilev на 26/04/2018 10:29 am; мнението е било променяно общо 1 път
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
Revelation
Потребител
Потребител

Регистриран на: 24/03/2013 3:23 pm

Support: 52
Bonus: 104
Мнения: 675
Мнение 25/04/2018 12:31 pm      Отговорете с цитат


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

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

Обектно:
Javascript code:

obj.properties.inputs.input_0.label


Като масив:
Javascript code:

obj['properties']['inputs']['input_0']['label']


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

Регистриран на: 07/02/2009 2:41 pm

Support: 24
Bonus: 45
Мнения: 603
Мнение 25/04/2018 1:21 pm      Отговорете с цитат


.. така става но много код Smile

$(document).ready(function() {
var obj={};
var obj2={};
оbj['properties']="test";
obj2['test2']=obj;
alert(obj2.toSource());
...
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
Revelation
Потребител
Потребител

Регистриран на: 24/03/2013 3:23 pm

Support: 52
Bonus: 104
Мнения: 675
Мнение 25/04/2018 1:51 pm      Отговорете с цитат


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

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

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

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

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

Javascript code:

var obj = {};

// или

var obj = new Object();


Като първия е за предпочитане.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
vasilev
Потребител
Потребител

Регистриран на: 07/02/2009 2:41 pm

Support: 24
Bonus: 45
Мнения: 603
Мнение 25/04/2018 1:56 pm      Отговорете с цитат


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

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);

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

Регистриран на: 24/03/2013 3:23 pm

Support: 52
Bonus: 104
Мнения: 675
Мнение 25/04/2018 2:02 pm      Отговорете с цитат


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

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(). И с това омешване обекти-масиви накрая ще се омажеш яко.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
vasilev
Потребител
Потребител

Регистриран на: 07/02/2009 2:41 pm

Support: 24
Bonus: 45
Мнения: 603
Мнение 25/04/2018 2:10 pm      Отговорете с цитат


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

{
  "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 :

Javascript code:
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>' );
});



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

Javascript code:
$(".grclose").click( function(){
var selectedOperatorId = $flowchart.flowchart('getSelectedOperatorId');
$('.grinputs').each(
function(index){

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



тук ще ги добавя към масива на мястото на алерт просто исках да видя че работи.
но сетването е проблема..
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
Revelation
Потребител
Потребител

Регистриран на: 24/03/2013 3:23 pm

Support: 52
Bonus: 104
Мнения: 675
Мнение 25/04/2018 4:20 pm      Отговорете с цитат


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

Регистриран на: 24/03/2013 3:23 pm

Support: 52
Bonus: 104
Мнения: 675
Мнение 25/04/2018 4:27 pm      Отговорете с цитат


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

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

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

Javascript code:

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

}


Javascript code:

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

// или

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

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


Нещо такова се прави.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
vasilev
Потребител
Потребител

Регистриран на: 07/02/2009 2:41 pm

Support: 24
Bonus: 45
Мнения: 603
Мнение 25/04/2018 8:54 pm      Отговорете с цитат


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

Javascript code:
$GroupTitle.keyup(function() {
var selectedOperatorId = $flowchart.flowchart('getSelectedOperatorId');
if (selectedOperatorId != null) {
$flowchart.flowchart('setOperatorTitle', selectedOperatorId, $GroupTitle.val());
}
});


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

Javascript code:
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);



но title е текст докато data си е array.. въпросът е какво точно да се подаде за да смени имената..
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
Revelation
Потребител
Потребител

Регистриран на: 24/03/2013 3:23 pm

Support: 52
Bonus: 104
Мнения: 675
Мнение 25/04/2018 10:29 pm      Отговорете с цитат


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

Между другото, по-скапано написана библиотека не бях виждал.

Javascript code:

var operatorData = $flowchart.flowchart('getOperatorData', selectedOperatorId);
operatorData.properties.inputs.input_0.label = "NEW LABEL";

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


Опитай така.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
vasilev
Потребител
Потребител

Регистриран на: 07/02/2009 2:41 pm

Support: 24
Bonus: 45
Мнения: 603
Мнение 26/04/2018 8:22 am      Отговорете с цитат


разбрах .. първо да се вземат обектите и след това да се сменят..
ок е сега, мерси !

има много други библиотеки но тази е що годе добра и безплатна..
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла Посетете сайта на потребителя
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> HTML / Javascript / CSS Часовете са според зоната GMT + 2 Часа
12
Страница 1 от 2


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети