我正在创建一个更新两个相关模型的表单,对于此示例,一个带有一组任务的项目,我希望控制器接受一个项目,该项目的任务集合从表单输入加载.我有这个工作,基本上下面的代码没有部分.
这可能听起来很傻但我无法弄清楚如何从部分访问计数器(i)?
模型
public class Project
{
public string Name { get; set; }
public List<Task> Tasks { get; set; }
}
public class Task
{
public string Name { get; set; }
public DateTime DueDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Create.cshtml(查看)
@model MyWebApp.Models.Project
@using(Html.BeginForm("Create", "Project", FormMethod.Post, new { id = "project-form" }))
{
<div>
@Html.TextBox("Name", Model.Name)
</div>
@for(int i = 0; i < Model.Tasks.Count; i++)
{
@Html.Partial("_TaskForm", Model.Tasks[i], new ViewDataDictionary<int>(i))
}
}
Run Code Online (Sandbox Code Playgroud)
_TaskForm.cshtml(局部视图)
@model MyWebApp.Models.Task
<div>
@Html.TextBox(String.Format("Tasks[{0}].Name", 0), Model.Name) …
Run Code Online (Sandbox Code Playgroud) 我有以下javascript函数未通过jslint检查
function hasActiveX() {
return ('ActiveXObject' in window);
}
Run Code Online (Sandbox Code Playgroud)
jslint错误
Unexpected 'in'. Compare with undefined, or use the hasOwnProperty method instead.
Run Code Online (Sandbox Code Playgroud)
我应该忍受jslint错误,还是有更好的方法来确定ActiveXObject?我找不到跳过此检查的jslint标志?
我正在使用带有asp mvc预览3的Razor视图
我正在尝试创建一些我希望直接在视图中可用的方法.这些不是真正的Html辅助方法,所以我不认为扩展HtmlHelper有意义吗?
我的目标,能够在视图中调用方法即
@HelloWorld(); vs @Html.HelloWorld()
Run Code Online (Sandbox Code Playgroud)
我可以通过在HtmlHelper上创建扩展方法来使Html.HelloWorld工作
public static class HtmlExtensions
{
public static string HelloWorld(this HtmlHelper helper)
{
return "Hello";
}
}
Run Code Online (Sandbox Code Playgroud)
我想做同样的事情但是为了观点; 我的问题 - 视图是什么类型的对象?
注意:我可以通过在.cshtml页面中定义方法来实现此功能
@functions
{
public string HelloWorld()
{
return "Hello";
}
}
@HelloWorld() @* now this works *@
Run Code Online (Sandbox Code Playgroud)
然后我试着把这个代码放在我的_viewstart.cshtml文件中,认为它可以在所有视图中使用,但事实并非如此
如果我知道视图是哪种类型我认为它可以很容易地扩展,任何帮助表示赞赏
刚刚安装了rails 3.1 rc1,我试图用新资产管道来管理javascript的最佳方法默认情况下,所有coffeescript都被编译成一个application.js文件,这是一件好事.
每个单独的咖啡脚本文件都附加到js文件并包装在一个匿名函数中,该函数通过调用方法执行.常见的场景是使用一些jquery将各种表单转换为ajax表单,更新UI等...
这些脚本中的许多都是特定于控制器或动作的,我试图用"常规"方式来处理这个,因为所有内容都包含在一个匿名函数中,我如何只执行特定控制器/动作的代码,默认情况下,正在执行所有匿名函数
我确实玩了一些hacks,我将控制器和动作名称加载到js变量中,然后在coffeescript中检查那些有条件地运行代码,我不是很喜欢
我最初的想法是每个咖啡文件都包含一个js命名空间/对象,我会从视图中调用特定的那些,使用default_bare = true配置来调用它
请参阅如何在Rails 3.1 for CoffeeScript中使用选项"--bare"?
编辑
再看一些:看起来这可能是正确的方法 - 使用Rails 3.1和Coffeescript"找不到变量"错误
让我们说我有一个用户列表页面,您可以按不同的列排序,点击"电子邮件"时它将通过sort_by = email sort_direction = asc或desc
sort_by = "email" # really params[:sort_by]
sort_direction = "asc" # really params[:sort_direction]
User.order("#{sort_by} #{sort_direction}")
# SELECT "users".* FROM "users" ORDER BY email asc
Run Code Online (Sandbox Code Playgroud)
所以如果我们更改sort_by,那么按预期工作
sort_by = "email; DELETE from users; --"
User.order("#{sort_by} #{sort_direction}")
# SELECT "users".* FROM "users" ORDER BY email; DELETE from users; -- asc
Run Code Online (Sandbox Code Playgroud)
现在我们没有更多用户:(
我可以手动构建一个有效sort_by的白名单,并将params [:sort_by]与之比较,但希望有一些内置的方法来处理这种事情
想要获得专家的意见,我宣布一个变量将作为我的应用程序javascript代码的命名空间,但我想检查它尚未定义.
这段代码很简洁,"似乎"可以工作 - 我应该避免这种情况并使用typeof'undef'检查吗?
var MY_NAMESPACE = MY_NAMESPACE || {};
Run Code Online (Sandbox Code Playgroud)
谢谢
# this code works
list = (0..20).to_a
# => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
odd = list.select { |x| x.odd? }
# => [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
list.reject! { |x| x.odd? }
# => [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
# but can i emulate this type of functionality with an enumerable method? …
Run Code Online (Sandbox Code Playgroud) 我有一个问题按当前日期排序数组.
我的数据库有一个名为的字段 day
day
有周如的日子:Monday
,Tuesday
,等.
我正在尝试按索引视图页面排序current day
.
我想在我的控制器中做这样的事情,
@happies = Happy.where(id: @search.results.map(&:id))
.page(params[:page])
.where(:day => Date.today.strftime('%A').capitalize.to_s)
Run Code Online (Sandbox Code Playgroud)
但而不是返回only
与天人们高兴Monday
我想order
通过day
这里day
等于current day
.
在我看来,我也考虑过这样做
喜欢的东西
<% @happies.sort_by(:day => Date.today.strftime('%A').capitalize.to_s).each do |happy| %>
上面的方法不起作用,但是我试图实现我想达到的目标.有关如何实现这一点的任何想法?
也许有一个activeview助手?