我最近放弃了使用Graphael和扩展包Ico.我认为它仍然是一个很棒的库,它只需要更好的文档和适当的API才能被广泛采用.
我已经使用图表转换区域以使用Google Charts,但似乎无法找到一种方法来执行我使用graphael的特定功能:拖动支持.我的一个折线图 需要是可编辑的,这意味着可以上下拖动线上的各个点以调整值.
我一直试图找到一个事件或一种方法来附加API中的事件,但没有取得多大成功.有没有人设法做那样的事情?
据说可以做自定义图表 - 可以这样做吗?
编辑:似乎不太可能或难以挂钩谷歌API或输出SVG.它位于iframe中,没有可用的源代码,因此它的选择越来越少.
我已经开始尝试使用Highcharts了.我能够完成Google引擎所做的一切,并且在渲染后可以摆弄图表.由于提供了源代码,因此可以更轻松地确定某些内容.它似乎比Google解决方案更快一些,因为它在使用折线图而不是单独的SVG圆形元素时使用路径.
我现在面临的问题与SVG Path元素有关 - 没有单点可以设置拖动.因此,为了使用jQuery.draggable,必须在与要拖动的SVG Path片段相同的位置注入SVG Circle或其他元素.所以必须解决以下问题: - 如何将创建的元素放置到正确的位置? - 如何在缩放图表时移动元素(任一轴上的最小值或最大值更改)? - 如何将新位置转换回一个值,为所提供的系列数据进行缩放?
有没有人对Highcharts有足够的深度体验来摆弄这些?我会尝试尽可能提供JSfiddle示例.
我最近在设置完全自动化的夜间构建/测试/部署环境时遇到了一些麻烦.简要解释一下设置.我们使用Mercurial作为源控制系统,使用TeamCity作为构建服务器.它目前在一台单独的机器上只有一个构建代理,以保持简单.
这个想法如下:每晚都有一个TeamCity构建运行.从Mercurial存储库中提取最新信息,运行构建,运行单元测试,部署到测试服务器,针对新部署的测试服务器运行验收测试(在构建代理上),如果所有这些通过将批次部署到临时服务器.除了验收测试之外,我已经完成了所有工作.这些都是使用SpecFlow和WatiN完成的.Everyhting在开发机器上运行良好(Windows 7 32位).但是,当我尝试运行验收测试(TeamCity中的NUnit)时,运行器报告失败,因为步骤[浏览器] .ContainsText(browserText).所有步骤都正确运行,如果我在构建代理上的同一浏览器中复制步骤(获得完全管理员访问权限),我可以看到文本存在.所以据我所知,测试应该通过.
我发现这个stackoverflow线程让我觉得我可能正在做一些关于如何保持浏览器实例的错误.解释一下:我有一套常见的步骤,例如"当我点击X按钮时"或"当我将文字X输入字段Y时"和有问题的那个"然后我显示X".因为我正在尽可能多地重复使用测试,所以我也推广了一个@requires_browser场景需求,然后定义如下:
[BeforeScenario("requires_browser")]
public void RequiresBrowserBeforeFeature()
{
Settings.MakeNewIeInstanceVisible = false;
ScenarioContext.Current.Set<Browser>(new IE(true));
}
[AfterScenario("requires_browser")]
public void RequiresBrowserAfterFeature()
{
ScenarioContext.Current.Get<Browser>().Close();
ScenarioContext.Current.Get<Browser>().Dispose();
}
Run Code Online (Sandbox Code Playgroud)
然后是共同的步骤:
[Then("I am shown \"(.*)\"")]
public void ThenIAmShown(string text)
{
Assert.IsTrue(ScenarioContext.Current.Get<Browser>().ContainsText(text));
}
Run Code Online (Sandbox Code Playgroud)
从这里我可以定义其他常见步骤,将文本输入文本框,单击按钮等.所有这一切都完美适用于开发环境,在visual studio 2010中运行[以管理员身份].
我认为ScenarioContext应该保留到测试完成之前我错了吗?
到目前为止我尝试过的:
配置构建代理程序服务以作为本地系统(SYSTEM)运行.这导致了所描述的问题 - ThenIAmShown(字符串文本)方法将始终失败.它与已启用本地桌面的交互.
配置的构建代理服务以网络管理员身份运行(完全管理员权限).此设置甚至不会运行测试.我得到的例外:
TearDown方法失败.WatiN.Core.Exceptions.BrowserNotFoundException:找不到匹配约束的IE窗口:等待附加到新创建的IE实例时超时.搜索在"30"秒后过期.TearDown:System.Collections.Generic.KeyNotFoundException:给定的键不在字典中.在WatiN.Core.IE.CreateIEPartallyInitializedInNewProcess()at WatiN.Core.IE.CreateNewIEAndGoToUri(Uri uri,IDialogHandler logonDialogHandler,Boolean createInNewProcess)...
已经将Interop.SHDocVw.dll和Microsoft.mshtml.dll组件添加到bin目录(在项目引用中复制到输出).
从构建代理运行NUnit UI.这按预期运行单元测试.让我相信可能存在安全问题.Windows Server 2008 R2 Enterprise上的Runnint NUnit 2.0.5.
有谁有这个问题?
我希望我不会错过一些非常明显的东西,但有没有理由为什么模型绑定器总是无法绑定从集合继承的视图模型?
假设我想显示一个分页列表并显示一个组合框并在其上方添加按钮(处理简单列表).涉及的类看起来像:
public class PagedList<T> : List<T>
{
public int TotalCount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后是一个看起来像的视图模型:
public class MyViewModel : PagedList<ConcreteModel>
{
public IEnumerable<ChildModel> List { get; set; }
public int? SelectedChildModelId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
所以在视图中(Razor):
@model MyViewModel
@using (Html.BeginForm())
{
@Html.DropDownListFor(model => model.SelectedChildModelId, new SelectList(Model.List, "ChildModelId", "DisplayName"))
}
Run Code Online (Sandbox Code Playgroud)
和控制器HttpPost动作:
public ActionResult(MyViewModel viewModel)
{
...
}
Run Code Online (Sandbox Code Playgroud)
以上将导致ActionResult中的viewModel为null.有合理的解释吗?据我所知,它仅限于查看从集合继承的模型.
我知道我可以使用自定义绑定器解决它,但涉及的属性是原始类型,甚至没有任何泛型或继承.
我重新设计了视图模型,使集合继承了类型作为属性,并修复了问题.然而,我仍然在摸着为什么粘合剂会破坏它.任何建设性的想法都赞赏.
关于mvc模板和泛型有一些问题,但似乎没有任何与我正在寻找的相关.考虑以下模型:
namespace MyNamespace
{
public class ModelBase { /* Not important for example */ }
public class MyModel : ModelBase
{
public string Name { get; set; }
}
public class MyViewModel
{
public IEnumerable<ModelBase> Data { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
和控制器:
public class HomeController : Controller
{
public ActionResult Index
{
return View(new MyViewModel { Data = new List<MyModel>() })
}
}
Run Code Online (Sandbox Code Playgroud)
Razor视图Views/Home/Index.cshtml看起来像:
@model MyNamespace.MyViewModel
@Html.EditorFor(m => m.Data)
Run Code Online (Sandbox Code Playgroud)
没什么特别的.如果我想要一个显示或编辑器模板,我可以在Views/Shared/EditorTemplate下或在名为MyModel.cshtml的Views/Home/EditorTemplates下创建一个文件,它可以正确找到它.
如果我想在显示列表时为ModelBase的每个实现做些不同的事情怎么办?Mvc视图查找器将在上述任何路径中正确找到List'1.cshtml模板.但是,我需要做的是为List`1 [MyModel] .cshtml做一个模板
我似乎无法获得正确的文件命名.到目前为止我尝试过的(相对于此示例命名):
razor ×2
collections ×1
drag ×1
generics ×1
highcharts ×1
javascript ×1
linechart ×1
modelbinders ×1
nunit ×1
specflow ×1
teamcity ×1
watin ×1