I've created a news widget that reads json data and is contained inside a dojox.layout.ScrollPane?.
When initially loaded, the ScrollPane? isn't scrolling.
The workaround I've found is to call layout() on the "_enter" event. That way, everytime the mouse enters the widget, it gets "layouted" again.
Here is my code :
<!-- News Widget -->
<div dojoType="dijit.Declaration" widgetClass="News"
defaults="{store: 'store'}">
<div dojoAttachPoint="newsNode"></div>
<script type="dojo/method" >
this.getAllNews = function() {
var store = new dojo.data.ItemFileWriteStore({url : this.store});
var newsNode = this.newsNode;
store.fetch({
onBegin : function() {
},
onError : function(errData, request) {
console.debug("Error while retrieving news");
console.dir(errData);
},
onItem : function(item) {
if (!store.hasAttribute(item, "endOfFile")) {
// Titre
var newsTitle = store.getValue(item, "newstitle");
var titleNode = document.createElement("div");
dojo.addClass(titleNode, "newsTitle");
titleNode.innerHTML = newsTitle;
// Date
var newsDate = store.getValue(item, "newsdate");
var dateNode = document.createElement("div");
dojo.addClass(dateNode, "newsDate");
dateNode.innerHTML = newsDate;
// Text
var newsText = store.getValue(item, "news");
var textNode = document.createElement("div");
dojo.addClass(textNode, "newsBody");
textNode.innerHTML = newsText;
// Picture
var newsMedia = store.getValue(item, "media");
var mediaNode = document.createElement("div");
dojo.addClass(mediaNode, "newsMedia");
mediaNode.innerHTML = "<img src=\"img/" + newsMedia + "\" width=\"452px\"/>";
dojo.place(titleNode, newsNode, "last");
dojo.place(dateNode, newsNode, "last");
dojo.place(textNode, newsNode, "last");
dojo.place(mediaNode, newsNode, "last");
}
},
onComplete : function(items, request) {
}
});
}
this.getAllNews();
</script>
</div>
<!-- Display -->
<div id="altStyle">
<div id="scrollPane" dojoType="dojox.layout.ScrollPane" preventCache="true" style="width:470px; height:500px; padding-left:12px">
<script type="dojo/connect" event="_enter">
this.layout();
</script>
<!-- call the news widget declared above -->
<div dojoType="News" store="ws/getNews.php"/>
</div>
</div>
And here is some json to test the widget...
{ "id" : "id",
"label": "title",
"items": [
{
"id": 1,
"title": "News 1",
"date": "21/11/2008",
"text": "Some news.",
"media": "img/mypicture1.jpg"
},
{
"id": 2,
"title": "News 2",
"date": "21/11/2008",
"text": "Some news.",
"media": "img/mypicture2.jpg"
},
{
"id": 1,
"title": "News 3",
"date": "21/11/2008",
"text": "Some news.",
"media": "img/mypicture3.jpg"
}
]
}
calling layout that often probably isn't the best thing. there is something else wonky going on with scrollpane at the moment, will look for 1.4 hopefully.