2016-04-17 3 views
2

Может быть, это уже обсуждалось где-то, я сам не мог найти точный ответ, как подойти к моей проблеме:Анализировать JSON для создания объекта в Javascript

У меня есть mutliniear «историю», которая выполняет код в каждом сегменте. Я написал конечный автомат, который инициирует новый сегмент, когда другой сегмент вызывает его. Каждый сегмент имеет функцию onEnter-, onCheck и onLeave. Как уже упоминалось имя, onEnter выполняется, когда сегмент вызывается, onCheck проверяет некоторый ввод до тех пор, пока некоторые условия не будут заполнены (если да, они приведут к другому сегменту), а onLeave будет выполняться непосредственно перед вызовом следующего сегмента.

В настоящее время я просто написал JavaScript Object вроде как это:

var flow = { 
    seg1: { 
     onEnter: function() { 
      this.say('Seg1'); 
     }, 
     onCheck: function(data) { 
      if (data.condition) { 
       machine.callNextSeg('seg2'); 
      } else if (data.condition2) { 
       machine.callNextSeg('seg3'); 
      } 
     }, 
     onLeave: function() { 
     } 
    }, 
    seg2: { 
     onEnter: function() { 
      this.say('Seg2'); 
     }, 
     onGestureCheck: function(data) { 
     }, 
     onLeave: function() { 
     } 
    }, 
    seg3: { 
     onEnter: function() { 
      this.say('Seg3'); 
     }, 
     onGestureCheck: function(data) { 

     }, 
     onLeave: function() { 
     } 
    } 
}; 

Пример немного упрощен для понимания, но код внутри будет немного сложнее.

Я хотел бы иметь файл JSON, который загружается, анализируется и создает такой объект. Файл JSON должен использовать более простой и абстрактный абстрактный синтаксис для записи. Особенно, чтобы сделать это быстрее.

Я представляю себе что-то вроде этого:

{ 
    "seg1": { 
     "onEnter": { 
      "say": 'Seg1' 
     }, 
     "onCheck": { 
      "condition1": "seg2", 
      "condition2": "seg3" 
     }, 
     "onLeave": { 

     } 
    }, 
    "seg2": { 
     "onEnter": { 
      "say": 'Seg2' 
     }, 
     "onCheck": { 

     }, 
     "onLeave": { 

     } 
    } 
} 

условия являются булевы и если верно, описанный сегмент должен быть вызван.

Было бы легко разобрать json, создать объект и создать внутри него функции для каждого onEnter, onCheck и onLeave? А также напишите необходимые фразы if?

Спасибо за подсказки в правильном направлении.

веселит

J.

ответ

1

var flow = {...} является объектом буквальным и на самом деле лучше всего подходит для того, что вам нужно сделать, но я понимаю желание иметь все это «определено» в файле формата JSON , Проблема там заключается в том, что приложение, обрабатывающее ваш JSON-файл, ДОЛЖЕН понимать/быть Javascript (что бросает вызов идее наличия JSON в качестве языкового агностика - несмотря на его имя). Это может быть то, что вам нужно: JavaScript Function Serialization

Также проверьте проголосовали ответ здесь: What is the correct way to "serialize" functions in javascript for later use

+0

Хорошо. Спасибо за ваш комментарий. В моем случае мой файл будет javascript, так что это не проблема. Я попытаюсь что-то создать. Если я не могу заставить его работать, я останусь с объектным литералом. Хотя мне очень хотелось бы иметь упрощенную запись потока ... – Merc

Смежные вопросы