我一直在尝试使用自定义实现FXMLLoader的setControllerFactory方法Callback<P,R>.
ORACLE文档说明如下:
实现可能返回null值以指示它不能或不能创建给定类型的控制器; 在这种情况下,加载器将使用默认控制器构造机制.
我想要实现的结果是我可以使用依赖注入框架来创建任何需要参数的控制器,但我会让FXMLLoader任何不需要参数的控制器加载.
所以,如果我有以下简单的FXML文件,它使用ViewController不接受参数的类...
<StackPane fx:id="pane"
xmlns:fx="http://javafx.com/fxml"
fx:controller="my.package.ViewController">
</StackPane>
Run Code Online (Sandbox Code Playgroud)
并且我使用以下简单的控制器工厂实现来发信号通知FXMLLoader我希望它在这种情况下管理控制器的构造...
loader.setControllerFactory(new Callback<Class<?>, Object>(){
@Override
public Object Call(Class<?> type) {
return null; // Let the FXMLLoader handle construction...
}
});
Run Code Online (Sandbox Code Playgroud)
在调用load()方法之后,我的ViewController类中的Initialise方法永远不会被调用(我已用断点验证了这一点).
如果我更改我的控制器工厂实现以返回ViewController该类的实例,那么一切都按预期工作.
任何人都可以帮我解决我的困惑吗?我是否Callback错误地使用了界面或者ORACLE文档不正确?
我正在学习Cocoa,通过阅读文档我的理解是,当应用程序启动时会发生以下情况:
这很好,对单个窗口应用程序有意义但是我对创建基于文档的应用程序时xcode的作用感到困惑.
在这种情况下,有两个nib文件; 第一个包含应用程序菜单,第二个包含表示NSDocument子类的窗口.当我运行应用程序时,会自动打开一个新的文档窗口.
基于我对上面概述的应用程序如何工作的理解,我不明白我的应用程序在从属性列表中查找菜单笔尖后如何知道打开文档窗口.据我所知,没有生成代码来执行此操作(除了windowNibName方法,但是从哪里调用?)
任何人都可以告诉我xcode的不同之处,以便应用程序知道它是基于文档的,因此需要打开文档窗口吗?
更新:
我想要了解的是,如果我的应用程序被设置为基于文档的应用程序而不是单个窗口应用程序,Xcode如何知道如何做一些不同的事情.据我所知,没有设置来指定这个,Xcode似乎没有生成任何代码来提供这种不同的行为.
通过阅读过去几天的文件,我想我知道这是如何工作但不确定:
希望任何Cocoa专家都可以确认我的理解是否正确,或者我是否正在咆哮错误的树.
我已经阅读了一些关于通用存储库实现的帖子.我还阅读了一些帖子,解释了从我的存储库中暴露IEnumerable和IQueryable之间的区别.
我希望在数据库中过滤数据的灵活性(而不是客户端在内存中),但是要避免为我的所有实体(以及实现这些接口的具体类)定义单独的存储库接口.
目前我的存储库看起来像这样:
public interface IRepository<T>
{
IEnumerable<T> GetAll();
IEnumerable<T> Find(Expression<Func<T, bool>> where);
void Add(T entity);
void Attach(T entity);
void Delete(T entity);
}
Run Code Online (Sandbox Code Playgroud)
以及具体实现的一个例子是:
public class Repository<T> : IRepository<T> where T : class
{
private DbContext _context;
private DbSet<T> _entitySet;
public Repository(DbContext context)
{
_context = context;
_entitySet = _context.Set<T>();
}
public IEnumerable<T> GetAll()
{
return _entitySet;
}
public IEnumerable<T> Find(Expression<Func<T, bool>> where)
{
return _entitySet.Where(where);
}
public void Add(T entity)
{
_entitySet.Add(entity);
}
public void Attach(T entity)
{
_entitySet.Attach(entity); …Run Code Online (Sandbox Code Playgroud) 我正在试验JavaFX WebView控件,我想使用MathJax Javascript库来呈现数学内容.
作为测试,我创建了一个基本的JavaFX FXML项目,WebView在FXML中添加了一个并更新了控制器代码,如下所示:
public class SampleController implements Initializable {
@FXML
private WebView webView;
@Override
public void initialize(URL url, ResourceBundle rb) {
webView.getEngine().load(
"file:///Users/benjamin/Desktop/Page.html");
}
}
Run Code Online (Sandbox Code Playgroud)
html文件如下所示:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/x-mathjax-config">
MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
</script>
<script type="text/javascript"
src="/Users/benjamin/Downloads/mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>
</head>
<body>
When $a \ne 0$, there are two solutions to \(ax^2 + bx + c = 0\) and they are
$$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$ …Run Code Online (Sandbox Code Playgroud) 我有一个用于跟踪零件的小型数据库.为了这个例子,表格如下所示:
PartID(PK),int
PartNumber,Varchar(50),唯一
描述,Varchar(255)
我要求定义某些部分被分类为彼此相似.为此,我设置了第二个表,如下所示:
PartID,(PK),int
SecondPartID,(PK),int
ReasonForSimilarity,Varchar(255)
然后在两个表之间建立了多对多关系.
当我需要报告被认为相似的部分时会出现问题,因为如果部分XYZ123类似于ABC678,则关系是IE的两种方式,那么ABC678被认为与XYZ123类似.因此,如果我想列出与给定部分类似的所有部分,我需要确保在两个方向上设置关系(这是错误的,因为数据是重复的)或者需要有2个查询在两个方向上查看表.这些解决方案都不适合我.
那么,应该如何处理这个问题呢?这可以单独用SQL解决,还是我的设计需要改变以适应业务需求?
考虑以下部分XYZ123,ABC123,ABC234,ABC345,ABC456和EFG456,这些部分已输入上面输入的现有结构中.您最终可能会得到这样的数据(省略此时无关的原因字段):
PartID,SecondPartID
XYZ123,ABC123
XYZ123,ABC234
XYZ123,ABC345
XYZ123,ABC456
EFG456,XYZ123
我的用户想知道"哪些部件与XYZ123类似".这可以使用如下查询来完成:
SELECT SecondPartID
FROM tblRelatedParts
WHERE PartID = 'XYZ123'
Run Code Online (Sandbox Code Playgroud)
但问题是它不会挑选出与XYZ123相关的部分EFG456,尽管这些部件已经反过来了.根据用户当前正在使用哪个部分以及部件之间的关系将始终是双向的,这是可行的.
我对此的问题是,我现在需要检查当用户在两个部分之间建立关系时,它在另一个方向上尚不存在.
@Goran
我已经使用您的建议做了一些初步测试,这就是我计划使用您的建议来解决问题的方法.
上面列出的数据输入到新表中(请注意,我已将partID更改为部件号以使示例更清晰;但我的问题的语义没有改变)
该表如下所示:
RelationshipID,PartNumber
1,XYZ123
1,ABC123
2,XYZ123
2,ABC234
3,XYZ123
3,ABC345
4,XYZ123
4,ABC456
5,EFG456
5,XYZ123
然后,我可以使用如下查询检索类似部件的列表:
SELECT PartNumber
FROM tblPartRelationships
WHERE RelationshipID ANY (SELECT RelationshipID
FROM tblPartRelationships
WHERE PartNumber …Run Code Online (Sandbox Code Playgroud) 您将如何设计此场景(使用Entity Framework 4.1,Code First和存储库模式):Visual Studio解决方案包含以下项目
Solution
|-Web Application Project
|-DAL Project
|-Model Project
Run Code Online (Sandbox Code Playgroud)
所以在模型项目中有各种类.假设我们在那里有一个名为User的类,其定义如下(剥离):
public class User{
[Key]
public int UserId { get; set; }
....
//this property has a unique constraint created in a custom DB Initializer class
public string email { get; set; }
....
}
Run Code Online (Sandbox Code Playgroud)
在DAL项目中,驻留存储库方法(Insert,Update等)以及Initializer类:
public class MyDatabaseInitializer : IDatabaseInitializer<MyDatabase>
{
public void InitializeDatabase(MyDatabase context)
{
try
{
if (!context.Database.Exists())
{
context.Database.Create();
context.Database.ExecuteSqlCommand(
"ALTER TABLE Users ADD CONSTRAINT uc_Email UNIQUE(Email)");
}
}
catch (Exception ex)
{ …Run Code Online (Sandbox Code Playgroud) 我的表单中有一个面板,带有一个单击事件处理程序.我还在面板内部有一些其他控件(标签,其他面板等).如果您单击面板内的任何位置,我希望单击事件进行注册.只要我没有单击面板内的任何控件,click事件就会起作用,但无论你在面板内单击什么位置,我都想触发事件.如果没有向面板内的所有控件添加相同的单击事件,这是否可行?
默认情况下,JavaFX TextField内置ContextMenu了"撤消","复制","剪切"等选项.该ComboBox也具有同样的ContextMenu,当它被设置为可编辑(的ComboBox其实是这是一个编辑器的一部分TextField).
我想ContextMenu用自定义替换它,但我遇到了禁用默认问题的问题.
我试图消耗ContextMenu和鼠标点击事件,但ComboBox并ComboBox.getEditor()都有空ContextMenu.
我错过了什么吗?
我根据文档创建了一个灵活的库包。当我尝试使用它构建它时,出现以下错误。nimble build
错误:没有什么可构建的。
bin您是否指定了使用.nimble 文件中的密钥构建的模块?
我可以这样做,它确实修复了错误,但根据文档,将密钥添加bin到.nimble文件中会将我的包变成二进制包。
我尝试过的其他事情:
nimble install:这似乎并不能验证我的代码是否会实际编译,并且会愉快地将任何内容安装到本地包目录(.nim例如,我向我的文件添加了一个 C# 类,并且它已成功安装)。nimble c:nim这有效,但我必须传递要编译的文件的路径,并且文件binDir中的条目.nimble被忽略,导致输出被放置在与正在构建的文件相同的目录中。这使开发周期变得复杂,因为我必须在编译后手动清理。我想我也可以创建一个单独的.nim文件并在安装后导入我的库,但是对于只想验证开发早期阶段的包是否能够真正编译来说,这是一个很大的开销。
我只是希望能够验证我的库包中的源代码在语法上是否正确并且可以编译。对于库包来说这意味着如何完成?
我刚刚遇到了一些看起来像这样的 Haskell 代码:
(functionOne, functionTwo)
| someCondition = (10, "Ten")
| otherwise = (20, "Twenty")
Run Code Online (Sandbox Code Playgroud)
从代码的使用方式来看,我想我理解这段代码的意图,即它只是一种更简洁的写法:
functionOne
| someCondition = 10
| otherwise = 20
functionTwo
| someCondition = "Ten"
| otherwise = "Twenty"
Run Code Online (Sandbox Code Playgroud)
但是,我不记得以前见过以这种方式编写的函数,也不知道这种技术被称为什么,因此无法搜索有关此的任何其他信息。
所以我的问题是: