Announcement

Collapse
No announcement yet.

Ajax in einer MVC- Architektur?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ajax in einer MVC- Architektur?

    Hallo zusammen,

    ich bin heute das erste mal hier und bin bereits begeistet vom Niveau der Diskussionen, ich werd sicher öfter dieses Forum besuchen.

    Nun zu meiner Frage bzw. der Diskussion, die ich auslösen möchte.
    Ich habe schon einmal ein ähnliches Posting in einen anderem Forum erstellt, aber leider konnte mir nicht weiter geholfen werden bzw. es kam keine Antwort. Ich habe vor das MVC- Design Pattern mit dojo umzusetzen (Info MVC: Model View Controller - Wikipedia, Info dojo/ MVC: Model-View-Controller (MVC) with JavaScript | Alex @ Net).

    Ich möchte dojo 0.9 verwenden. Soweit so gut, ich habe mir das oben genannte Bsp. zur Umsetzung von MVC mit dojo angesehen und mir ist die Vorgehensweise dabei auch klar. Was mir nicht klar ist, wo der Ajax- Request stattfinden muss, im Controller oder im Model? Wahrscheinlich gehen beide Wege. Aber ich weiß nicht wie die Implementierung genau aussehen soll. Ich hab bereits rumprobiert, aber es will noch nciht so klappen. Hat jmd. von euch schon mal so etwas in der Richtung gemacht? Evtl. best practise Vorschläge?

    Es handelt sich hierbei um ein Proof of Concept und deswegen habe ich den Quellcodes der oben angegeben Quelle nur modifieziert:

    Controller.js
    PHP Code:
    dojo.declare('Controller'null, {
        
        
    constructor : function (model) {
            
    this.oModel model;
        },
        
        
    addItem : function () {
            var 
    item prompt('Add item:''');
            if (
    item) {
                
    this.oModel.addItem(item);
            }
        },
        
        
    delItem : function () {
            
    this.oModel.removeSelectedItem();
        },
        
        
    updateSelected : function (e) {
            
    this.oModel.setSelected(e.target.selectedIndex);
        }
    }); 
    Model.js:
    PHP Code:
    dojo.declare('Model'null, {

        
    constructor : function () {
            
    this._items = new Array('Data 1','Data 2');
            
    this._selected = -1;
        },
        
        
    getItems : function () {
            return [].
    concat(this._items);
        },
        
        
    addItem : function (item) {
            
    this._items.push(item);
        },
        
        
    removeItemAt : function (index) {
            
    this._items.splice(index1);
        },
        
        
    removeSelectedItem : function () {
            if (-
    != this._selected) {
                
    this._items.splice(this._selected1);
            }
        },
        
        
    setSelected : function (index) {
            
    this._selected index;
        }
    }); 
    View.js:
    PHP Code:
    dojo.declare('View'null, {

        
    constructor : function (modelcontroller) {
            
    this.oModel model;
            
    this.oController controller;
            
    this.elements = {
                        
    'list'         dojo.byId('list'), 
                        
    'addButton' dojo.byId('plusBtn'), 
                        
    'delButton' dojo.byId('minusBtn')
                    };
        
            
    dojo.connect(this.oModel'addItem'this'rebuildList');
            
    dojo.connect(this.oModel'removeSelectedItem'this'rebuildList');
            
    dojo.connect(this.elements.list, 'onchange'this.oController'updateSelected');
        },

         
    show : function () {
            
    this.rebuildList();
            var 
    this.elements;
            
    dojo.connect(e.addButton'onclick'this.oController'addItem');
            
    dojo.connect(e.delButton'onclick'this.oController'delItem');
        },
        

        
    rebuildList : function () {
            var list = 
    this.elements.list;
            while (list.
    lastChild) {
                list.
    removeChild(list.lastChild);
            }
            var 
    items this.oModel.getItems();
            for (var 
    key in items) {
            list.
    appendChild(document.createElement('option')).appendChild(document.createTextNode(items[key]));
            }
            
    this.oModel.setSelected(-1);
        }
    }); 
    index.html:
    PHP Code:
    <html>
        <
    head>
            <
    meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
            <
    script type="text/javascript" src="../lib/dojo/dojo/dojo.js" djConfig="parseOnLoad: true, isDebug: true"></script>
            <
    script type="text/javascript" src="../lib/MVC/Controller/Controller.js"></script>
            <
    script type="text/javascript" src="../lib/MVC/Model/Model.js"></script>
            <
    script type="text/javascript" src="../lib/MVC/View/View.js"></script>
            <
    script type="text/javascript">
                
    dojo.addOnLoad(function () {
                    var 
    model = new Model();
                    var 
    controller = new Controller(model);
                    var 
    view = new View(modelcontroller);
                    
    view.show();
                });
            </
    script>
        </
    head>
        <
    body>
            <
    select id="list" size="10" style="width: 15em"></select>
            <
    br />
            <
    br />        
            <
    button id="plusBtn">  Hinzuf&uuml;gen  </button>
            <
    button id="minusBtn">  L&ouml;schen </button>
        </
    body>
    </
    html
    Dieser Quellcode enthält noch keinen Ajax- Request. Wo würdet ihr ihn platzieren?

    Vielen Dank für eure Hilfe und viele Grüße
    masiru
Working...
X