1

我无法让 Mithril hello world MVC 示例正常工作。

这是我的代码,从Mitrhil homepage复制而来。请注意,我所做的唯一更改是将m.request({method: "GET", url: "pages.json"});方法调用交换为手动生成的 pages 对象。

//namespace
var app = {};

//model
app.PageList = function() {
    var pages = [];
    pages.push({title: 'page 1', url: '/page1.html'});
    pages.push({title: 'page 2', url: '/page2.html'});
    return pages;
};

//controller
app.controller = function() {
    var pages = app.PageList();
    return {
        pages: pages,
        rotate: function() {
            pages().push(pages().shift());
        }
    }
};

//view
app.view = function(ctrl) {
    return [
        ctrl.pages().map(function(page) {
            return m("a", {href: page.url}, page.title);
        }),
        m("button", {onclick: ctrl.rotate}, "Rotate links")
    ];
};

//initialize
m.module(document.getElementById("example"), app);

如您所见,我上面在jsFiddle中的示例不起作用,但另一个 Mitrhil 示例,待办事项应用程序jsFiddle可以正常工作。

我认为基本的 MVC Mitrhil 示例可以像 Todo 应用程序那样简单地工作,并且可能链接到 jsFiddle 或 CodePen 示例供用户分叉,类似于 React。

4

2 回答 2

1

有一些调用pages应该是变量引用,因为它是一个数组。这是修复:http: //jsfiddle.net/jug68s27/4/

ctrl.pages()->ctrl.pages

pages().push(pages().shift())->pages.push(pages.shift())

于 2015-03-16T04:14:54.600 回答
0

在这个例子中,值没有重绘,因为你没有使用m.prop,如果你想改变你的值,你可以使用 var pages = m.prop(''); 现在你可以使用pages().push或者ctrl.pages().map因为 m.prop 是一个函数!!!!记住这一点很重要,你会经常用到它

于 2015-12-18T14:59:01.897 回答