2

私のプロジェクトでは、各 Web ページのモジュールを作成し、次の名前の基本オブジェクトに追加しますView

App.js

var View = (function()  {

    var View  = function()  {
        this.attributes = {
            baseUrl : '',
            urls : {}
        };
    };

    View.prototype.setUrl = function(url)   {
        this.attributes.baseUrl = url;
    };

    View.prototype.getUrl = function()  {
        return this.attributes.baseUrl;
    };

    return new View();

})();

SearchView.js

var View = View || {};

var SearchView = View.SearchView = (function()  {

    var Private = {
        search : function(url)  {},
        loadSearchResult : function()   {},
        clearSearchForm : function()    {}
    };

    Private.search = function(url)  {
        ajax(url,...);
        this.loadSearchResult();
    };

    var SearchView = function() {
        this.settings = {};
    };

    SearchView.prototype.loadEventBindind = function()  {
        $(document)

        .on('click','#search-button', function()    {
            Private.search(View.baseUrl);
        })

        .on('click','#reset-search', function() {
            Private.clearSearchForm();
        });
    };

    return new SearchView();

})();

search.html

<script type="text/javascript" src="media/scripts/Modules/App.js"></script>
<script type="text/javascript" src="media/scripts/View/SearchView.js"></script>
<script type="text/javascript">
    View.setUrl('http://www.set.com/');
    View.SearchView.loadEventBindings();
</script>

このコードは Chrome と Firefox では正常に動作しますが、IE ではエラーがスローされます。

' View.SearchView' はnullオブジェクトかどうか

IE はこのようなオブジェクトの作成方法をサポートしていませんか?

4

1 に答える 1

1

あなたがしなければならないことがいくつかあります:

ViewApp.js スクリプトがSearchView.js によって作成されたオブジェクトを上書きできるという弱点があります。

  • 1 つの変数を名前空間とクラスの両方として使用しないでください。それは直感に反する。
  • すでにシングルトンを作成している場合は、prototype パターンを使用する必要はありませんが、問題はありません。ただし、メモリは節約されません。

View as class and namespace の使用に固執している場合は、このような変更を加えViewて、上書きされないようにしてください。

var View = View || {};
var ViewTmp;
$.extend(ViewTmp = (function()  {

    var View  = function()  {
    ...
  ...
})(), View);
View = ViewTmp;

このスクリプトは、jQuery を使用していることを前提としています ($.extendメソッドのため)。

于 2012-08-13T12:13:22.530 に答える