在jquery / handlebars无限滚动的剃刀模型助手

时间:2015-07-26 16:01:16

标签: javascript jquery asp.net-mvc razor handlebars.js

我正在使用MVC5并且最初有一个带有手动分页的标准MVC实现,一切都很顺利。除此之外,当我向朋友展示时,他就像“这些数字的东西在这里是什么?” (指的是分页按钮,在他辩护中他正在使用他的智能手机)。那时我决定无限滚动会更好。

在看起来像是一百万次谷歌搜索之后,大多数解决方案(以及我能够理解的所有解决方案)都使用json和jquery。由于我已经使用Troy Goode的PagedList进行手动分页,我在这里推荐了他推荐的解决方案:

How Can I Convert My Paging Functionality To Use AJAX Insead?

而且,我使用json,jquery和把手来提出这个:

172.17.0.24

据我所知,它很有效,除了我现在似乎已经失去了使用razor html帮助器的能力,更具体地说,<div id="incidentsList"></div> <div id="incidentsWaypoint">.</div> @section Scripts{ <script id="incident-template" type="text/x-handlebars-template"> <div class="tRoot"> <div class="tRow"> <div class="index-title"> <a href="/Incidents/Details/{{IncidentId}}">{{Title}}</a> </div> </div> <div class="tRow"> <div class="index-description"> {{Description}} </div> </div> <div class="tRow"> <div class="pCount"> Count: {{Count}} </div> <div class="pSend"> !!!!Partial View Here!!!! </div> </div> </div> </script> <script type="text/javascript" src="/Scripts/handlebars-v3.0.3.js"></script> <script type="text/javascript" src="/Scripts/waypoints.min.js"></script> <script type="text/javascript"> var source = $("#incident-template").html(); var template = Handlebars.compile(source); $(function () { var page = 1; var $incdiv = $('#incidentsList'); var $waypoint = $('#incidentsWaypoint'); var opts = { offset: '100%' }; $waypoint.waypoint(function () { $waypoint.waypoint('remove'); $.getJSON('@Url.Action("AjaxPage", "Incidents")', { page: page++ }, function(incidents) { $.each(incidents, function (index, incident) { var pPartial = '@Html.Partial("_ProjectStatus", incident)'; //console.log(incident.Title); //var context = { IncidentId: incident.IncidentId, Title: incident.Title, Description: incident.Description, Count: incident.Count }; var context = incident; $incdiv.append(template(context)); }); $waypoint.waypoint(opts); }); }, { offset: '100%' }); }); </script> } 具有逻辑如下:

@Html.Partial("_ProjectStatus", incident)

所以,我不能只为此生成直接的HTML ...

我打算将把手模板切成小模板,然后希望在jquery中使用剃须刀助手,就像我从if (!Model.IsOwner(Context.User.Identity.Name)) { if (Model.IsSent(userId)) { 开始一样,然后将它们全部附加在jquery代码中,但是想发布它首先,在我完成所有工作之前,看看我是否在正确的轨道上,尤其是(经过更多搜索之后)我还没有找到任何人试图这样做。

因此,我的问题是(我不希望他们都回答,我只是不确定要问什么,希望有人能看到我想要完成的事情),我会是什么样的试图在上一段甚至工作吗?在把手模板中,razor助手/逻辑是不可能的吗?是否有某些示例?...尤其是那些拥有完整实现的人(即某些事情比仅仅是一个实例中使用帮助器/逻辑的列表更复杂的东西)?是否有另一种方法可以进行无限滚动,这样我可以保留我的剃刀代码或仅使用部分视图(或类似)以及最小的jquery?

与往常一样,我感谢任何指导。谢谢。

1 个答案:

答案 0 :(得分:0)

到目前为止,我通过将我的视图逻辑(从nerddinner中学习,这也让我想到另一个问题)移动到控制器,通过简单地将最后两行添加到我的json结果并将它们作为bools返回来修复它:

{{#unless IsOwner}}
   {{#if IsSent}}
     <div class="sent">Sent...</div>
   {{else}}
     <div class="sent">Not Sent...</div>
   {{/if}}
{{/unless}}

然后在把手中,我做了:

cap deploy:upload

我尝试使用@ Html.Action进行局部视图以及其他一些让我无法理解他们甚至可能工作的事情。我喜欢把事情简单化,而且我做的几件事情明显变慢了(约20%)。

此修复程序也稍微快了约10%。也许是因为我现在没有拉动模型中的每一个字段?无论如何,希望我可以在模板中使用这些助手,但我可以忍受这一点,特别是因为它允许我继续...

我很想听到其他任何意见。感谢。