与MVC的emberJS

时间:2016-05-13 10:09:19

标签: asp.net-mvc ember.js asp.net-web-api ember-cli

我正在尝试将MVC项目与EmberJS结合起来。我搜索了现有的问题,但我只是通过这些来到这里:我用ember new emberProject创建了一些东西并编写了简单的模板,路线,模型,海市蜃楼等。然后我创建了一个MVC Web API并在控制器中创建了AppController写下这个:

 public class AppController : Controller
    {
        // GET: App
        public ActionResult Index()
        {
            return File(Server.MapPath("~/emberProject/dist/") + "index.html", "text/html");
        }
    }

并为索引编写路径:

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <link rel="stylesheet" href="/emberProject/dist/assets/vendor.css">
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div> 
    </div>
</body>
</html>

此后我该怎么办?我不应该在MVC项目上看到我的.hbs.js文件吗?因为我不能。此外,现在我正在使用硬编码的虚拟数据。我需要从MVC获取数据,以便在我的ember项目中用作“模型”。我该怎么办? 感谢。

1 个答案:

答案 0 :(得分:4)

强烈建议ember社区保持您的前端应用程序和API后端分离。如果您想使用SELECT f.flight_number, f.flight_date, f.airport, a.iata, a.iso3166 AS airport_country_code, max(air.icao) FROM flights_database f LEFT JOIN airlines air ON air.name = f.airline JOIN airports a ON f.airport = a.airportNameClean WHERE f.flight_date BETWEEN DATE_SUB(CURDATE(), INTERVAL 1 DAY) AND DATE_ADD(CURDATE() , INTERVAL 1 DAY) GROUP by f.flight_date, f.airport, f.flight_number, a.iata ORDER by f.airport, f.flight_number

,这也是一项要求

因此,您只能使用asp.NET MVC应用程序来提供数据和静态资产。对于开发,您可以使用storage.googleapis.com/<bucket>/<object>启动ember-cli项目,以便所有API请求都代理到您的asp.NET后端。

然后你应该在你的asp.NET MVS项目中创建一个API来访问你的数据,我建议使用JSONAPI,这是ember的默认实现。

然后,您只能使用ember-cli构建客户端应用程序,而不使用asp.NET MVC,只能从后端获取数据。

只有在部署时才需要集成,您需要使用ember serve --proxy=http://your-asp.net_mvcproject/来构建静态文件,并且作为后备,您始终提供ember ember-cli文件,因此ember可以启动和使用ember路由器可以决定该做什么。

另一种方法是在你的asp.net MVC项目中集成ember。这绝对是可能的,但只有在您同时理解ember build --prod构建管道和asp.NET项目结构时才应该这样做。如果你这样做,你必须自己做很多由index.html处理的事情。

例如,您需要自己将ES6发送到ES5,并且您无法使用任何ember-cli个插件。您也可能需要编译模板,并实现自定义解析器。