2012-10-18 24 views
1

我遇到了一些問題:我打開了一個基於模板的視圖,從控制器收到此錯誤。 這個錯誤的原因是什麼?另一個嘗試在dojo上註冊使用id的小部件

控制器:

define([ 
    "dojo/_base/declare", "dojo/_base/lang", 

    "models/RestStorage", 
    "views/userPage/UserPage" 
], function (declare, lang, RestStorage, UserPage) { 
    return declare(null, { 
     systemUser:"", 

     constructor:function (options) { 
      lang.mixin(this, options); 
      this.model = new RestStorage(); 
     }, 
     init:function() { 
      this.view = new UserPage({model:this.model}, "container"); 
     } 
    }); 
}); 

查看:

define([ 
    "dojo/_base/declare", "dojo/_base/lang", "dojo/Evented", 

    "dijit/_WidgetBase", "dijit/_TemplatedMixin", "dijit/_WidgetsInTemplateMixin", "dojo/text!./user-page.html", 

    "dojox/mvc/Group", "dojox/mvc/Repeat", "dojox/mvc/Output" , "dijit/form/Button" 
], function (declare, lang, Evented, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, template) { 
     return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, Evented], { 
      templateString:template, 
      model:null, 

      constructor:function (options) { 
       lang.mixin(this, options); 
      } 
     }); 
    } 
); 

而且模板:

<section id="userPage"> 
    <header id="userPageHeader"> 
    </header> 
    <section id="userPageContent"> 
     <p data-dojo-type="dojox/mvc/Group" data-dojo-props="ref: this.model"> 
      Current count: <br/> 
      Max count: 
     </p> 
    </section> 
    <footer id="userPageFooter"> 
    </footer> 
</section> 

UPD: 這是我的index.html和app.js:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>MNSolution</title> 
    <link rel="stylesheet" href="resources/js/lib/dijit/themes/claro/claro.css" media="screen"/> 
    <link rel="stylesheet" href="resources/css/main.css"/> 
    <script> 
     var dojoConfig = { 
      async:true, 
      baseUrl:"resources/js/", 
      packages:[ 
       {name:"dojo", location:"lib/dojo" }, 
       {name:"dijit", location:"lib/dijit" }, 
       {name:"dojox", location:"lib/dojox" }, 
       {name:"app", location:"app", main:"app" }, 
       {name:"controllers", location:"app/controllers"}, 
       {name:"views", location:"app/views"}, 
       {name:"models", location:"app/models"} 
      ], 
      has:{ 
       "dojo-debug-messages":true 
      }, 
      isDebug:true, 
      parseOnLoad:true, 
      deps:[ "dojo/parser", "app/app" ] 
     } 
    </script> 
    <script src="resources/js/lib/dojo/dojo.js"></script> 
    <script> 
     require(["dojo/parser", "app/app"], function (parser, App) { 
      parser.parse(); 
      var application = new App(); 

     }); 
    </script> 
</head> 
<body class="claro"> 
<div id="container"></div> 
</body> 
</html> 

define([ 
// Base modules 
    "dojo/_base/declare", "dojo/_base/lang", 
// login and user page controllers 
    "controllers/LoginController", "controllers/UserPageController", 
// ready! 
    "dojo/ready" 
], function (declare, lang, LoginController, UserPageController) { 
    return declare("app", null, { 
     loginController:null, 
     userPageController:null, 

     constructor:function() { 
      this.loginController = new LoginController(); 

      if (!this._checkAuth()) { 
       this.loginController.init(); 
       this.loginController.on("loginSuccess", lang.hitch(this, function() { 
        this._loginSuccess(); 
       })); 
      } else { 
       this._loginSuccess(); 
      } 
     }, 
     _checkAuth:function() { 
//TODO check auth 
      return true; 
     }, 
     _loginSuccess:function() { 
      this.userPageController = new UserPageController({}); 
      this.userPageController.init(); 
     } 
    }); 
}); 

最好的問候,並抱歉我的英語! Alexey

+0

你能否包含一些更多的細節?就像你遇到了什麼錯誤。 –

+0

什麼版本的dojo?你的HTML是什麼樣的? – Dancrumb

+0

這裏有更多的細節:只有這個控制器已經初始化,並且沒有任何更多的這個ID的組件。以下是錯誤消息的全文:「嘗試使用id == dojox_mvc_Group_0註冊小部件,但該ID已註冊」。 – Inv3r

回答

0

我注意到您的模板中設置了一些id屬性。這通常是不好的形式,因爲當您在頁面上多次使用小部件時,可能會導致重複的id。這可能會導致標題中描述的重複ID錯誤。

如果你使用css-styling的id,那麼你可以用class屬性來解決這個問題。如果它們用於在代碼中引用,請使用data-dojo-attach-point

data-dojo-attach-point:這會將它所連接的dom節點賦值給解析模板的對象中的屬性。 (注意:您正在使用 dijit/_WidgetsInTemplateMixin,如果節點是要解析的小部件,則該屬性將分配給小部件而不是它的dom節點)。

例如:

<section data-dojo-attach-point="userPage"> 
    <header data-dojo-attach-point="userPageHeader"> 
    </header> 
    <section data-dojo-attach-point="userPageContent"> 
     <p data-dojo-type="dojox/mvc/Group" data-dojo-props="ref: this.model"> 
      Current count: <br/> 
      Max count: 
     </p> 
    </section> 
    <footer data-dojo-attach-point="userPageFooter"> 
    </footer> 
</section> 

這將分配外<部>節點this.userPage窗口小部件內,this.userPageHeader將引用<頭>,.. 。等等。

相關問題