Free cookie consent management tool by TermsFeed Policy Generator

source: branches/OaaS/HeuristicLab.Services.Optimization.Web/Content/experiment.model.js @ 9305

Last change on this file since 9305 was 9305, checked in by fschoepp, 11 years ago

#1888:

  • Added an Update / GetExperiment... methods to the controller for updating and querying experiments.
  • The AlgorithmConverter class now properly converts from/to JSON format.
  • Integrated backbone js as MVC provider for JavaScript + jquery.
  • Added experiment.model.js + experiment.view.js + experiment.controller.js containing the MVC impl. for the Experiment pages.
  • Added new methods to the ExperimentController usable by the backbone js model implementation.
  • Added the experiment dialog from HL 3.3.7 (variate experiment parameters). It's capable of variating the algorithm parameters.
File size: 3.4 KB
Line 
1//================== MODELS =====================
2var ControllerModel = Backbone.Model.extend({
3  defaults: {
4    selectedNode: null 
5  }
6});
7
8var Experiment = Backbone.RelationalModel.extend({   
9  url: function () {
10    return '/Experiment/Experiment?nodeId=' + this.get('nodeId');
11  },
12  defaults: {
13    title: 'My Experiment',
14    isExperiment: true,
15    run: false,
16    nodeId: null,
17    repititions: 1,
18    group: 'TESTAZURE'
19  },
20  isNew: function() { return this.get('nodeId') == null; },
21  relations: [{
22    key: 'experiment',
23    relatedModel: 'ExperimentNode'
24  }]
25});
26
27var ExperimentNode = Backbone.RelationalModel.extend({
28    defaults: {
29        title: 'Experiment',
30        key: -1,
31        data: {},
32        parent: null,
33        isExperiment: false,
34        nodeId: null
35    },
36    relations: [{
37        type: Backbone.HasMany,
38        key: 'children',
39        relatedModel: 'ExperimentNode',
40        collectionType: 'ScenarioList',
41        reverseRelation: {
42            key: 'parent'
43        }
44    }],
45    url: function () {
46        return this.get('isExperiment') ? '/Experiment/Experiment?nodeId=' + this.get('nodeId') : '/Experiment/Scenario?nodeId=' + this.get('nodeId');
47    },
48    initialize: function (spec) {
49        if (typeof spec.key === 'undefined' || spec.key == -1) {
50            spec.key = ExperimentNode.globalKeyCount;
51            this.set({ key: spec.key });
52            ExperimentNode.globalKeyCount++;
53        }
54        else if (spec.key >= ExperimentNode.globalKeyCount)
55            ExperimentNode.globalKeyCount = spec.key + 1;
56
57        ExperimentNode.globalNodeMap[spec.key] = this;
58    },
59    // adds a new experimentNode to this node
60    addNode: function (experimentNode) {
61        if (!(experimentNode instanceof ExperimentNode)) {
62            experimentNode = new ExperimentNode(experimentNode);
63        }
64        this.get('children').add(experimentNode);
65        experimentNode.set({ parent: this });
66        this.trigger('node-added', experimentNode);
67        return experimentNode;
68    },
69    // moves an experimentNode into this node
70    moveNode: function (experimentNode) {
71        var parent = experimentNode.get('parent');
72        if (parent != null) {
73            // remove from parent
74            parent.get('children').remove(experimentNode);
75        }
76        this.addNode(experimentNode);
77    },
78    // delete this node
79    remove: function () {
80        var parent = this.get('parent');
81        if (parent != null) {
82            parent.get('children').remove(this);
83            this.set({ parent: null });
84            // simply replace it with 'undefined'
85            delete ExperimentNode.globalNodeMap[this.get('key')];
86        }
87        this.trigger('node-removed', this);
88    },
89    lookup: function (key) {
90        return ExperimentNode.globalNodeMap[key];
91    }
92},
93{
94    globalKeyCount: 0,
95    globalNodeMap: {},
96    lookup: function (key) {
97        return ExperimentNode.globalNodeMap[key];
98    },
99    nextGlobalKey: function () {
100        var key = ExperimentNode.globalKeyCount;
101        ExperimentNode.globalKeyCount++;
102        return key;
103    }
104}
105);
106
107var ExperimentList = Backbone.Collection.extend({
108  url: function () {
109    return "/Experiment/ExperimentList";
110  },
111  model: Experiment
112});
113
114var ScenarioList = Backbone.Collection.extend({
115  url: function () {
116    return "/Experiment/ScenarioList";
117  },
118  model: ExperimentNode
119});
Note: See TracBrowser for help on using the repository browser.