2015-03-16 3 views
1

У меня возникли проблемы с получением примера мифрилового приветствия MVC.mithril hello world Пример MVC не работает

Это мой код, так как копируется из Mitrhil homepage. Обратите внимание, что единственное изменение, которое я сделал, это обмен вызовом метода m.request({method: "GET", url: "pages.json"}); на объект, созданный вручную.

//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, приложение TODO jsFiddle работает отлично.

Я думаю, что было бы разумно, чтобы основной пример MVC Mitrhil работал просто так, как это делает приложение Todo, и, возможно, ссылается на пример jsFiddle или CodePen для пользователей на fork, аналогичный React.

ответ

1

Были некоторые звонки на pages, которые вместо этого должны были быть переменными ссылками, поскольку это массив. Вот исправление: http://jsfiddle.net/jug68s27/4/

ctrl.pages() ->ctrl.pages

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

+0

Спасибо, это означает, что пример на домашней странице Мифрила неверен? как не будет 'm.request ({method:" GET ", url:" pages.json "})' возвращать массив, или это возвращает метод. В любом случае может быть хорошей идеей иметь простую ссылку jsFiddle для вилки на своем сайте, используя массив или возвращая данные из конечной точки выборки. –

+0

'm.request' возвращает GetterSetter, который является функцией, поэтому проблема возникла, когда вы изменили ее на массив. Хорошая идея с jsFiddle для примеров. Если вы хотите, откройте проблему для github (или сделайте запрос на тяну)! – ciscoheat

0

В этом примере значение не перекроить, потому что вы не использовали m.prop, если вы хотите, чтобы значение change you cas use var pages = m.prop(''); Теперь вы можете использовать pages().push или ctrl.pages().map, потому что m.prop является функцией !!!! Помните, что это очень важно, вы будете использовать его много

Смежные вопросы