开发者

Why this sample ASP.NET + Jquery + javascript custom MVC doesn't show something?

I tried to integrate this javascript mvc sample http://www.alexatnet.com/content/m开发者_StackOverflowodel-view-controller-mvc-javascript into an asp.net page, I'm complete beginner at jquery and nothing shows up, why ?

Update: I have added missing html listbox but now no javascript seems to execute to initialize the listbox nor the buttons seem to work

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="javascriptmvc01._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <script src="Scripts/jquery-1.4.1.js" type="text/javascript">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <script language="JavaScript" type="text/javascript">

        /**
        * The Model. Model stores items and notifies
        * observers about changes.
        */
        var ListModel = function (items) {
            this._items = items;
            this._selectedIndex = -1;

            this.itemAdded = new Event(this);
            this.itemRemoved = new Event(this);
            this.selectedIndexChanged = new Event(this);
        };

        ListModel.prototype = {

            getItems: function () {
                return [].concat(this._items);
            },

            addItem: function (item) {
                this._items.push(item);
                this.itemAdded.notify({ item: item });
            },

            removeItemAt: function (index) {
                var item = this._items[index];
                this._items.splice(index, 1);
                this.itemRemoved.notify({ item: item });
                if (index == this._selectedIndex)
                    this.setSelectedIndex(-1);
            },

            getSelectedIndex: function () {
                return this._selectedIndex;
            },

            setSelectedIndex: function (index) {
                var previousIndex = this._selectedIndex;
                this._selectedIndex = index;
                this.selectedIndexChanged.notify({ previous: previousIndex });
            }

        };  


        var Event = function (sender) {
            this._sender = sender;
            this._listeners = [];
        };

        Event.prototype = {
            attach: function (listener) {
                this._listeners.push(listener);
            },
            notify: function (args) {
                for (var i = 0; i < this._listeners.length; i++) {
                    this._listeners[i](this._sender, args);
                }
            }
        };

        var ListView = function (model, controller, elements) {
            this._model = model;
            this._controller = controller;
            this._elements = elements;

            var _this = this;

            // attach model listeners
            this._model.itemAdded.attach(function () {
                _this.rebuildList();
            });
            this._model.itemRemoved.attach(function () {
                _this.rebuildList();
            });

            // attach listeners to HTML controls
            this._elements.list.change(function (e) {
                _this._controller.updateSelected(e);
            });

        };


        ListView.prototype = {

            show: function () {
                this.rebuildList();
                var e = this._elements;
                var _this = this;
                e.addButton.click(function () { _this._controller.addItem() });
                e.delButton.click(function () { _this._controller.delItem() });
            },

            rebuildList: function () {
                var list = this._elements.list;
                list.html('');
                var items = this._model.getItems();
                for (var key in items)
                    list.append($('<option>' + items[key] + '</option>'))
                this._model.setSelectedIndex(-1);
            }

        };

        var ListController = function (model) {
            this._model = model;
        };

        ListController.prototype = {

            addItem: function () {
                var item = prompt('Add item:', '');
                if (item)
                    this._model.addItem(item);
            },

            delItem: function () {
                var index = this._model.getSelectedIndex();
                if (index != -1)
                    this._model.removeItemAt(this._model.getSelectedIndex());
            },

            updateSelected: function (e) {
                this._model.setSelectedIndex(e.target.selectedIndex);
            }

        };

        $(function () {
            var model = new ListModel(['PHP', 'JavaScript']);
            var view = new ListView(model, new ListController(model),
        {
            'list': $('#list'),
            'addButton': $('#plusBtn'),
            'delButton': $('#minusBtn')
        }
    );
            view.show();
        });        
    </script>

<select id="list" size="10" style="width: 15em"></select><br/>
<button id="plusBtn">  +  </button>
<button id="minusBtn">  -  </button>
    </div>



    </form>
</body>
</html>


change:

<script src="Scripts/jquery-1.4.1.js" type="text/javascript">

to:

<script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>


you don't have the HTML DOM elements in your code anywhere:

<select id="list" size="10" style="width: 15em"></select><br/>
<button id="plusBtn">  +  </button>
<button id="minusBtn">  -  </button>

these are the elements that are being selected and passed as 'list', 'addButton', and 'delButton' when calling new ListView(..). without them in the document, the javascript doesn't have anything to work with.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜