gpt4 book ai didi

javascript - 如何使用 JSON 源创建 Mithril.js SPA?

转载 作者:行者123 更新时间:2023-11-28 06:42:15 26 4
gpt4 key购买 nike

我正在尝试使用 Mithril.js 制作 SPA(单页应用程序)。到目前为止我已经找到了非常好的教程here ,当然还有 Mithril homepage ,但仍然无法实现两者的结合。

这是戴夫指南中修改后的工作示例...

function btn(name, route){
var click = function(){ m.route(route); };
return m( "button", {onclick: click}, name );
}
function Page(content){
this.view = function(){
return [
m("page",
m("span", Menu.menu())
)
, m("div", content)
];
}
}
var Menu = {
menu: function(){
return [
btn("Home", "/home")
, btn("About", "/about")
];
}
};
var page_Home = new Page("The home of the Hobbits. Full of forests and marshes.");
var page_About = new Page(["The blighted home of Sauron. Scenic points of interest include:"]);

m.route(document.body, "/home", {
"/home": page_Home,
"/about": page_About
});

我的 JSON 文件:

[
{
"id":1,
"title": "Home",
"url": "/home",
"content":"This is home page"
},{
"id":2,
"title": "About",
"url": "/about",
"content":"This is about page"
},{
"id":3,
"title": "Galery",
"url": "/galery",
"content":"This is gallery page"
}
]

以及我将上述两者结合起来的努力:

//model
var PageSource = {
list: function() {
return m.request({method: "GET", url: "pages.json"});
}
};
var pages = PageSource.list();

var App = {
//controller
controller: function() {
return {
menu: pages
, rotate: function() { pages().push(pages().shift()); }
, id: m.route.param(pages.url)
}
},

//view
view: function(ctrl) {
return [
m("header"
, m("h1", "Page Title")
, m("span",
ctrl.menu().map(function(item) {
var click = function(){
console.log (item.url);
m.route(item.url);
};
return [
m("button", {onclick: click}, item.title)
];
})
)
, m("hr")
)
, m("button", {onclick: ctrl.rotate}, "Rotate links" )
, m("p", ctrl.content ) //CONTENT
];
}
};

//initialize
m.route(document.body, "/home", {
"/:id": App
});

最后,问题是:- “如何从 JSON 文件中检索数据并根据所选按钮(路由)将其显示在 div 中?”- “当我使用 m.route 时,我的整个 View 都会刷新,但我只想重新加载更改后的 div。如何?”请帮忙,因为到目前为止我真的很喜欢 mithril.js

最佳答案

你已经很接近了。

  1. 您的路由器似乎配置了两次,后一个声明将覆盖第一个声明。在声明其他代码之后,使用 m.route 声明您的路由一次。

  2. 当您尝试在应用程序 View 中引用 ctrl.content 时,它将是未定义的,因为您尚未在应用程序 Controller 中定义内容属性。将您想要的内容属性添加到应用程序 Controller 返回的对象中。

关于javascript - 如何使用 JSON 源创建 Mithril.js SPA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33690057/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com